php file_get_contents иногда терпит неудачу во время cronjob - PullRequest
2 голосов
/ 03 мая 2011

Я пытаюсь запустить скрипт php с помощью cronjob, и иногда (примерно в половине случаев) я получаю следующее предупреждение:

Предупреждение PHP: file_get_contents (http://url.com): не удалось открыть поток: сбой HTTP-запроса! В /path/myfile.php в строке 285

Программа продолжает работать после того, что заставляет меня думать, что это не проблема тайм-аута или проблемы с памятью (тайм-аут установлен на 10 минут и памяти на 128M), но переменная, в которой я храню результаты этого вызова функции в пусто. Странная часть в том, что я делаю несколько других звонков на этот же сайт с другими параметрами URL, и у них никогда не возникает проблем. Единственное отличие этого вызова функции заключается в том, что загружаемый файл занимает около 70 МБ, а остальные - около 300 КБ.

Кроме того, я никогда не получаю это предупреждение, если я запускаю SSH на веб-сервере и запускаю скрипт php вручную, только когда он запускается из cron.

Я также попытался использовать cURL вместо file_get_contents, но затем мне не хватило памяти.

Спасибо, любая помощь здесь будет оценена.

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Возможно, удаленный сервер на URL.com иногда прерывает работу или возвращает ошибку для этого конкретного (большого) запроса?

Не думаю, что вы должны пытаться хранить 70 МБ в переменной.

Вы можете настроить cURL для загрузки непосредственно в файл. Что-то вроде:

$file = fopen ('my.file', 'w');
$c = curl_init('http://url.com/whatever');
curl_setopt($c, CURLOPT_FILE, $file);
curl_exec($c);
curl_close($c);
fclose($file);

Если ничего другого, curl должен предоставить вам гораздо лучшие ошибки о том, что идет не так.

1 голос
/ 03 мая 2011

Из другого ответа .. дважды проверьте, что эта проблема не возникает в некоторых случаях с параметрами URL, которые вы используете:

Примечание. Если вы открываете URI со специальными символами, например пробелами, вам необходимо закодировать URI с помощью urlencode () - http://docs.php.net/file%5Fget%5Fcontents

...