Php 什么';What’处理大量http请求的最快方法是什么(HEAD)?

Php 什么';What’处理大量http请求的最快方法是什么(HEAD)?,php,http,batch-file,Php,Http,Batch File,可能重复: 我有一个脚本,它使用foreach循环,从文件中获取一个条目id,并检查head请求的状态是否为200。这个脚本需要很长时间才能运行,所以有没有办法一次处理多个请求?我知道使用ajax时,如果我使用$.ajax()执行for循环,它将立即启动所有这些循环。如何使用php实现这种行为,或者是否存在允许批处理的替代方案?单个请求很容易(如您所述)。只需循环使用Pear库HTTP_Request2并发出HEAD请求: $request = new HTTP_Request2('htt

可能重复:

我有一个脚本,它使用foreach循环,从文件中获取一个条目id,并检查head请求的状态是否为200。这个脚本需要很长时间才能运行,所以有没有办法一次处理多个请求?我知道使用ajax时,如果我使用$.ajax()执行for循环,它将立即启动所有这些循环。如何使用php实现这种行为,或者是否存在允许批处理的替代方案?

单个请求很容易(如您所述)。只需循环使用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库,但要处理它要复杂得多:

然而,要在soley PHP中并行执行,您需要使用类似exec()的东西来派生其他PHP脚本,因为PHP本身不支持线程编程或并发。类似地,您也可以使用gearman之类的工具使用某种自定义作业/工作队列,但这相当复杂

一个请求很容易(正如您所注意到的)。只需循环使用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库,但要处理它要复杂得多:


然而,要在soley PHP中并行执行,您需要使用类似exec()的东西来派生其他PHP脚本,因为PHP本身不支持线程编程或并发。类似地,您也可以使用gearman之类的工具使用某种自定义作业/工作队列,但这相当复杂

使用
curl\u multi.*
函数。请参见使用
curl\u multi.*
函数。请参见

小心!如果您知道这需要很多时间,您可能会请求数百或数千个URL。请确保不要使目标服务器崩溃


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

小心!如果您知道这需要很多时间,您可能会请求数百或数千个URL。请确保不要使目标服务器崩溃

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