PHP Curl请求将运行脚本直到结束,但会收到超时错误

时间:2019-03-22 22:49:43

标签: php curl

我有一个PHP脚本(脚本1),该脚本使用AJAX从网站上调用。 该脚本将使用Curl调用服务器上的另一个PHP脚本(脚本2)。然后,该脚本还将使用Curl来运行另一个PHP脚本(脚本3)。

将执行第一个curl调用(执行脚本2)。 但是,脚本3总是会返回超时错误(但脚本3实际上会执行并执行应做的事情)。只是如果脚本2是使用脚本1的curl执行的,则没有响应返回给脚本2。

如果我在Web浏览器中启动脚本2,则将执行脚本3,并将响应返回给脚本2,并且不会发生超时。

所有脚本都在同一服务器上,除了与超时相关的错误外,我在日志中没有收到任何错误消息。

以下代码显示了脚本1如何启动脚本2的多个实例。 这部分工作正常,我已经通过从脚本2中将信息打印到文本文件中进行了检查,并且可以验证脚本2的所有实例都在运行/完成,并且它们都尝试执行脚本3并且都收到相同的超时错误。

            foreach ($urls as $url) {
               $requests[] = curl_init($url);
               curl_setopt($requests[count($requests) - 1], CURLOPT_RETURNTRANSFER, true);
            }

            $mh = curl_multi_init();
            foreach ($requests as $request) {
               curl_multi_add_handle($mh, $request);
            }


            $running = null;

            do {

                curl_multi_exec($mh, $running);
            } while ($running);

            $responses = array();
            foreach ($requests as $request) {
               $responses[] = curl_multi_getcontent($request);
            }

            foreach ($requests as $request) {
               curl_multi_remove_handle($mh, $request);
            }


           curl_multi_close($mh);

下面的代码块是脚本2执行脚本3的方式,如果我在浏览器中运行脚本2,这将很好地工作,大约需要5秒钟,输出将在浏览器窗口中打印,没有任何错误。

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_PORT, 80);
  curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
  curl_setopt($ch, CURLOPT_TIMEOUT, 60);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $output = curl_exec($ch);
  echo $output;
  curl_close($ch);   

如果脚本2是从脚本1开始的,则当脚本2尝试运行脚本3时,我将遇到此错误(毫秒数将始终与CURLOPT_TIMEOUT的值匹配)

Operation timed out after 60000 milliseconds with 0 bytes received 03/22/2019 06:13:04 pm

0 个答案:

没有答案