【问题标题】:PHP Curl script works from browser, doesn't work as Cron JobPHP Curl 脚本在浏览器中工作,不能作为 Cron Job 工作
【发布时间】:2014-09-02 06:43:01
【问题描述】:

我有一个非常简单的 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);

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

这是 cron 条目:

*/5 * * * * /usr/bin/php /home/username/scripts/test.php

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

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

  • 浏览器:curl 工作
  • Shell:curl 不起作用
  • Cron:curl 不起作用

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

【问题讨论】:

  • 在 shell 中简单地运行脚本会发生什么?这可能就像您需要将 -f 标志添加到 php 二进制文件一样简单 -
  • 您在哪里/如何定义 $url$fields$headers
  • 如果您在 cron 脚本中依赖 $_SERVER 值,它可能无法正常工作。
  • 网络服务器和 CLI 有不同的 php.ini 文件。确保与您的脚本相关的选项在两者中相同。
  • $url、$fields 和 $headers 不是问题,因为当我通过浏览器进行测试时,它工作正常。我也不依赖任何 $_SERVER 值。

标签: php curl cron


【解决方案1】:

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

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

希望对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    相关资源
    最近更新 更多