Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как проверить, скачался ли файл полностью 
:(
    Опции темы
hemp_smile
Дата 17.4.2010, 00:15 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



Встала следующая задача. Пропарсить некий сайт. Парсить необходимо не только текст , но и фото. В ходе написания столкнулся со следующей проблемой , фото на сайте который я пытаюсь пропарсить лежат в разных папках  (а мне необходимо всё складывать в одну), т.е. могут иметь одинаковые имена. По мимо этого файлы могут повторяться , т.е. во время парсинга мы натыкаемся на один и тот же файл. Не хотелось бы давать разные имена для одних и тех же файлов. после того как фото сохранено у нас на сервере , необходимо сохранить имя этого файла в файл.

На данный момент я пытаюсь сверить размеры файлов с одинаковыми именами. Если размер не совпадает то сохраняем файл с другим именем. если же совпадают , то всё ОК  ни чего не делаем. Всё бы ничего но , как узнать скачался ли файл полностью чтобы можно было сверять его размер с размером файлна на моём сервере. Фото качаю с помощью cURL.

Жутко завернул , но надеюсь что хоть кто то поймёт что мне надо smile 

Для большего понимания высылаю Код функции закачки файла и проверка размеров
Код

<?php

 function download_foto($link, $name_file)
 {
    
    $ch = curl_init();
    $fp = fopen("tmp_images/".$name_file, "a");

    curl_setopt ($ch, CURLOPT_URL, "http://www.example.com/".$link."");
    curl_setopt ($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_COOKIEJAR,$_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');
    curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt');

    curl_setopt($ch, CURLOPT_HEADER, 0);

    curl_exec($ch);

    curl_close($ch);
    fclose($fp);

    $isset_filesize = filesize('images/'.$name_file);
    $filesize = filesize('tmp_images/'.$name_file);

  if ($isset_filesize != $filesize)
  {
    $old_file_name = $name_file;
    for (;;)
    {
      if (file_exists("images/".$name_file))
      {
      $name_file = str_replace(".jpg", "", $name_file);
      $name_file .= "1.jpg";
      }            
      else
      {
        rename("tmp_images/".$old_file_name, "images/".$name_file);
        unlink("tmp_images/".$old_file_name);   
        break;
      }
        
    }
    }
    else
    {
     unlink("tmp_images/".$old_file_name);
    }
    
  
return $name_file;
 }

?>

PM MAIL   Вверх
bars80080
Дата 17.4.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



а что, cURL позволяет качать в несколько потоков? (сам не знаю, потому спрашиваю)
PM MAIL WWW   Вверх
smartov
Дата 17.4.2010, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Разве не будет возврата ошибки, если файл скачался не полностью? 
Или я не понял условие?
PM MAIL   Вверх
Fortop
Дата 18.4.2010, 03:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

Репутация: 20
Всего: 42



Цитата(bars80080 @  17.4.2010,  12:14 Найти цитируемый пост)
а что, cURL позволяет качать в несколько потоков? (сам не знаю, потому спрашиваю

Если сервер поддерживает докачку, то почему нет?
curl_multi_select и CURLOPT_RESUME_FROM в зубы и вперед.


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
hemp_smile
Дата 18.4.2010, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



Цитата(smartov @ 17.4.2010,  20:15)
Разве не будет возврата ошибки, если файл скачался не полностью? 
Или я не понял условие?

в том то и дело что не будет ошибки , он просто сверяет размеры , и если файл не докачался , то при сверке размеров файлов , получается что файлы разного размера т.е. по логике это разные файлы, а на самом деле файлы одинаковы
PM MAIL   Вверх
SickFxck
Дата 19.4.2010, 08:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: нет
Всего: 1



hemp_smile, кто "он"? Какие размеры? Откуда "он" их берёт?
PM MAIL   Вверх
hemp_smile
Дата 19.4.2010, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



Цитата(SickFxck @ 19.4.2010,  08:03)
hemp_smile, кто "он"? Какие размеры? Откуда "он" их берёт?

"Он" - пхп скрипт.
"Какие размеры?" - размеры файла существующего на моём сервере и размер скачиваемого файла с однинаковыми именами.
"Откуда "он" их берёт?" - 
Код

    $isset_filesize = filesize('images/'.$name_file);
    $filesize = filesize('tmp_images/'.$name_file);

PM MAIL   Вверх
SickFxck
Дата 19.4.2010, 17:37 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: нет
Всего: 1



Цитата(hemp_smile @  18.4.2010,  22:27 Найти цитируемый пост)
в том то и дело что не будет ошибки , он просто сверяет размеры , и если файл не докачался , то при сверке размеров файлов , получается что файлы разного размера т.е. по логике это разные файлы, а на самом деле файлы одинаковы 

Кто сказал что не будет ошибки? Даже если картинки отдаются скриптом и не посылается Content-length, то вполне вероятно, что ошибка будет, т.к. есть ещё chunked-encoding. При "неполучении" очередного чанка cURL подвиснет, а потом отвалится по таймауту с ошибкой.
PM MAIL   Вверх
hemp_smile
Дата 19.4.2010, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 13.3.2008

Репутация: нет
Всего: нет



Цитата(SickFxck @ 19.4.2010,  17:37)
Цитата(hemp_smile @  18.4.2010,  22:27 Найти цитируемый пост)
в том то и дело что не будет ошибки , он просто сверяет размеры , и если файл не докачался , то при сверке размеров файлов , получается что файлы разного размера т.е. по логике это разные файлы, а на самом деле файлы одинаковы 

Кто сказал что не будет ошибки? Даже если картинки отдаются скриптом и не посылается Content-length, то вполне вероятно, что ошибка будет, т.к. есть ещё chunked-encoding. При "неполучении" очередного чанка cURL подвиснет, а потом отвалится по таймауту с ошибкой.

Либо я не правильно обьяснил , либо ты не совсем понял. Дело в том что курл получает картинку , но ещё не полностью записав её в файл на моём сервере , скрипт продолжает работу и пытается сверить размеры. Что естественно даёт не правильный результат 

PM MAIL   Вверх
SickFxck
Дата 19.4.2010, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 16.4.2010

Репутация: нет
Всего: 1



hemp_smile, нет, в данном случае скрипт не продолжает работу, пока cURL не докачает файл.
PM MAIL   Вверх
smartov
Дата 19.4.2010, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 7
Всего: 259



Цитата(hemp_smile @  19.4.2010,  18:08 Найти цитируемый пост)
Дело в том что курл получает картинку , но ещё не полностью записав её в файл на моём сервере , скрипт продолжает работу и пытается сверить размеры. Что естественно даёт не правильный результат 

Это анриал. PHP работает в один поток, если не применять специальное расширение. Если размеры разные - значит картинка качается неправильно.

Добавлено через 36 секунд
Либо размер в хедерах неверный
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0748 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.