PHP file_get_contents在cronjob过程中有时会失败


php file_get_contents fails sometimes during cronjob

我试图通过cronjob运行php脚本,有时(大约一半的时间)我得到以下警告:

PHP警告:file_get_contents(http://url.com):打开流失败:HTTP请求失败!/path/myfile.php第285行

程序继续运行之后,这使我认为这不是超时问题或内存问题(超时设置为10分钟,内存为128M),但我存储该函数调用的结果的变量是空的。奇怪的部分是,我正在用其他url参数对同一个网站进行其他几个调用,他们从来没有问题。这个函数调用的唯一区别是它下载的文件大约是70 mb,而其他的都在300 kb左右。

另外,如果我SSH到web服务器并手动运行php脚本,只有当它从cron运行时,我才会得到这个警告。

我也试过使用cURL代替file_get_contents,但后来内存不足。

也许URL.com上的远程服务器有时超时或为特定的(大)请求返回错误?

我认为你不应该试图在一个变量中存储70mb的数据。

你可以配置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应该为您提供更好的错误信息。

从另一个答案…仔细检查您使用的URL参数是否在某些时候没有出现此问题:

注意:如果使用特殊字符(如空格)打开URI,则需要使用urlencode() - http://docs.php.net/file%5Fget%5Fcontents

对URI进行编码