php file_get_contents 在 cronjob 期间有时会失败

标签 php cron webserver file-get-contents

我正在尝试通过 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/

相关文章:

php - 在 PHP 中使用 HTTP 的 HEAD 命令最简单的方法是什么?

php - 需要 php 数组转 json 的帮助

python - 处理请求时发生异常

php - 四个问题中只有一个单选按钮被选中

php - Phalcon 未定义的命名空间 Phalcon

svn - CRONTAB 没有完成 svndump

cron - 为什么Dockerfile中的cron服务不运行?

r - setwd()在终端中导致语法错误

linux - 为 tomcat/JKS Keystore 转换 PKCS12 格式的证书

linux - 为 Windows 创建可执行的 Linux(例如 LAMP)虚拟化?