Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Контроль исполнения file_get_contents
 
 автор: Владимир55   (23.02.2012 в 22:41)   письмо автору
 
 

По таймеру запускается скрипт, содержащий код:

<?php
$tmp 
file_get_contents('http://www.site.ru/otvet.txt');


Файл otvet.txt бывает довольно большой – больше 3 Мб. Поэтому нет уверенности в том, что он всегда будет успешно скачан.

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

Возможно ли осуществить такую проверку?

  Ответить  
 
 автор: Киналь   (23.02.2012 в 23:50)   письмо автору
 
   для: Владимир55   (23.02.2012 в 22:41)
 

Мануал: «В случае неудачи, file_get_contents() вернёт FALSE.»

Оно?

  Ответить  
 
 автор: Владимир55   (24.02.2012 в 00:05)   письмо автору
 
   для: Киналь   (23.02.2012 в 23:50)
 

Оно.
Только я вот чего не пойму: если скачиваемого файла не существует, то выдается FALSE. А если файл существует, но скачался не полностью вследствие разрыва соединения, тогда как?

  Ответить  
 
 автор: Sfinks   (24.02.2012 в 00:15)   письмо автору
 
   для: Владимир55   (24.02.2012 в 00:05)
 

FALSE вернется не если файл не существует, а в случае возникновения ошибки. Если вам важно знать какого рода эта ошибка, то проверьте сперва if( file_exists() ) тогда $s = file_get_contents() и if( $s === false ) echo "read error". Вообще 3Мб это не проблема. Если файл читается в пределах сервера, так он точно прочитается. Ну если не на 100%, то на 99.999.

  Ответить  
 
 автор: Владимир55   (25.02.2012 в 10:37)   письмо автору
 
   для: Sfinks   (24.02.2012 в 00:15)
 

К сожалению, проверку if( file_exists() ) осуществить невозможно, поскольку file_exists() не работает с удаленными файлами, не доступными файловой системе, на которой установлен скрипт.

  Ответить  
 
 автор: Sfinks   (25.02.2012 в 11:17)   письмо автору
 
   для: Владимир55   (25.02.2012 в 10:37)
 

Тогда загружайте файл через curl, а не через file_get_contents. После загрузки, но перед закрытием curl, можно узнать много полезной информации через curl_getinfo().

  Ответить  
 
 автор: Владимир55   (25.02.2012 в 11:36)   письмо автору
 
   для: Sfinks   (25.02.2012 в 11:17)
 

Можно сделать, опираясь только на file_get_contents. Но нюанс в том (и с curl он останется), что при отсутствии файла попытка его скачать занимает заметное время.

Я полагал, что проверка существования файла пройдет мгновенно, а уж скачивание будет длиться, сколько потребуется. А получается, что попытка открыть несуществующий файл длится не меньше, чем длилось бы само скачивание!

Похоже, что это работает только таким образом... Ну, пусть работает хоть так.

  Ответить  
 
 автор: Sfinks   (25.02.2012 в 13:15)   письмо автору
 
   для: Владимир55   (25.02.2012 в 11:36)
 

> попытка открыть несуществующий файл длится не меньше, чем длилось бы само скачивание
Плохо понимаю, как такое может быть. Только если сервер на 404 отдает огромную страницу. В таком случае можно сперва загрузить только заголовки страницы, чтоб проверить существование.

  Ответить  
 
 автор: Владимир55   (25.02.2012 в 17:26)   письмо автору
 
   для: Sfinks   (25.02.2012 в 13:15)
 

В таком случае можно сперва загрузить только заголовки страницы, чтоб проверить существование.

Отличная идея!

  Ответить  
 
 автор: Киналь   (24.02.2012 в 00:33)   письмо автору
 
   для: Владимир55   (24.02.2012 в 00:05)
 

Практика — критерий истины. Попробуйте скачать файл 100 Мб) Он-то точно до конца не загрузится, вот и увидите, что будет в этом случае.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования