PHP Curl 脚本可在浏览器中运行,但不能作为 Cron 作业运行

Dan*_*cco 3 php cron curl

我有一个非常简单的 PHP 脚本,用于发出 POST 请求。代码如下:

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);
curl_close($ch);
mail('myemail@gmail.com','Script run with success','Script run with success',$headers);
Run Code Online (Sandbox Code Playgroud)

当我从浏览器执行它时,它工作正常。但是,当我尝试将其作为 cron 作业执行时,Curl 部分将不起作用。脚本的其余部分甚至可以作为 cron 作业运行,因为我在最后收到了确认电子邮件。

这是 cron 条目:

*/5 * * * * /usr/bin/php /home/username/scripts/test.php
Run Code Online (Sandbox Code Playgroud)

关于为什么 Curl 没有作为 cron 作业执行的任何线索?

更新:我尝试通过 shell 运行脚本,但 Curl 部分也无法运行。所以:

  • 浏览器:curl 有效
  • 外壳:curl 不起作用
  • Cron:curl 不起作用

更新 2:在通过 shell 运行时添加 -dsafe_mode=Off 使脚本运行良好。但是,将相同的标志添加到 cron 条目并没有做任何事情。所以我仍然需要弄清楚如何从 cron 让它工作。

Dan*_*cco 5

结果证明是身份验证问题。我通过在 CURL 配置中添加以下两行来解决它:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助某人。