【问题标题】:Php script halts when called via async curl通过异步 curl 调用 PHP 脚本时停止
【发布时间】:2016-11-11 02:13:07
【问题描述】:

这是一个调用 $url 的 PHP 代码:

        $handle = curl_multi_init();
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 6000);
        curl_setopt($ch, CURLOPT_USERPWD, "xxxx:xxxx");
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($ch,CURLOPT_COOKIE, CookieName . "=" .Security::getSid());
        //$output = curl_exec($ch);
        //curl_close($ch);
        curl_multi_add_handle($handle, $ch);
        $mrc = curl_multi_exec($handle, $active);

问题: 当通过 curl 调用时,$url 处的脚本会停止,而不会出现任何错误:print "something";。如果我获取 url 并在浏览器中打开它,那么它工作正常。

今天早上在 ubuntu 14.04 系统上开始发生这种情况,没有修改任何 PHP 脚本。

请注意,调用者和 $url 都在 htaccess 上(同一台机器,相同的 htaccess 凭据)

【问题讨论】:

  • 网站可以通过cURL调用吗?你是什​​么意思是 halts ?它得到空白响应?它没有反应?它得到404? 500?错误日志告诉你什么?
  • 错误日志为空。我在磁盘上的一个单独文件中添加了手动日志记录——它显示脚本在该行停止。在这一点上,我会以你可能建议的任何方式调用脚本,只要它是异步的并且可以工作:)
  • 没有错误没有什么。它只是......结束:)
  • 结束是什么意思?如果您在 行之前放置echo '1';,则第二行不会被执行?
  • 没错!我已经用 writeLog("1") 、 writeLog("2") 等填充了被调用的脚本,在日志中我看到一个“x”,后面什么也没有。通过这种方式,我设法确定了它停止的位置。

标签: php curl asynchronous


【解决方案1】:

解决方案是在调用 ajax 的 php 上调用 session_write_close() 以便会话释放从而防止锁定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 2023-04-11
    • 2017-07-04
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    相关资源
    最近更新 更多