通过异步 curl 调用 PHP 脚本时停止

Posted

技术标签:

【中文标题】通过异步 curl 调用 PHP 脚本时停止【英文标题】:Php script halts when called via async curl 【发布时间】: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”,后面什么也没有。通过这种方式,我设法确定了它停止的位置。 【参考方案1】:

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

【讨论】:

以上是关于通过异步 curl 调用 PHP 脚本时停止的主要内容,如果未能解决你的问题,请参考以下文章

异步 PHP 执行

如何通过 PHP 发送带有 pem 证书的 curl 请求?

php中curl爬虫 怎么样通过网页获取所有链接

PHP Curl PUT 在 curl_exec 处停止

调用服务器的 PHP 脚本是不是异步运行?

php curl 发布到 PHPBB