2

可能重复:
PHP 中的异步 HTTP 请求

我有一个脚本,它使用 foreach 循环并从文件中获取项目 ID,如果状态为 200,则检查头部请求。该脚本需要很长时间才能运行,所以有什么办法可以做一次多个请求?我知道 ajax 如果我用 $.ajax() 做一个 for 循环,它会立即启动它们。如何使用 php 获得这种行为,或者是否有替代方法可以进行批处理?

4

3 回答 3

4

使用curl_multi_*函数。见http://www.php.net/manual/en/function.curl-multi-exec.php

于 2013-02-04T22:27:17.140 回答
0

当心!如果您知道这需要很长时间,您可能会请求大约数百或数千个 URL。确保不要压倒目标服务器。

另请注意,根据目标上运行的代码,请求所需完成的工作量HEAD可能与请求完全相同GET。因此,唯一的优化是不将数据传输给您。这可能被误认为是拒绝服务攻击。

于 2013-02-04T22:29:11.840 回答
0

一个请求很容易(就像你注意到的那样)。只需循环并使用 Pear 库 HTTP_Request2 并发出 HEAD 请求:

  $request = new HTTP_Request2('http://www.your_url.com/',
                         HTTP_Request2::METHOD_HEAD);
  $response = $request->send();
  if (200 == $response->getStatus()) {
    echo "Yippie... a 200";
  } 

您也可以使用 php curl 库,但处理起来要麻烦得多:Header only retrieve in php via curl

但是,要在单独的 PHP 中并行执行此操作,您需要使用 exec() 之类的东西来分叉其他 php 脚本,因为 PHP 本身不支持线程编程或并发。同样,您也可以使用 gearman 或其他东西使用某种自定义作业/工作队列,但这非常复杂。

于 2013-02-04T22:16:06.807 回答