我正在尝试通过 cronjob 运行 php 脚本,有时(大约一半的时间)我收到以下警告:
PHP 警告:file_get_contents(http://url.com):无法打开流:HTTP 请求失败!在第 285 行的/path/myfile.php 中
之后程序继续运行,这让我认为这不是超时问题或内存问题(超时设置为 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 应该会为您提供更好的错误提示。
关于php file_get_contents 在 cronjob 期间有时会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5872814/