可能重复:
Asynchronous HTTP requests in PHP执行大量HTTP请求(HEAD)的最快方法是什么?
我有一个使用foreach循环,并从一个文件中获取的项目ID和检查HEAD请求脚本如果状态200.这段脚本需要很长时间才能运行,那么有什么方法可以一次完成多个请求吗?我知道,如果我用$ .ajax()做一个for循环,它会一次启动它们。我怎么能得到这个行为与PHP或有没有其他的批处理?
可能重复:
Asynchronous HTTP requests in PHP执行大量HTTP请求(HEAD)的最快方法是什么?
我有一个使用foreach循环,并从一个文件中获取的项目ID和检查HEAD请求脚本如果状态200.这段脚本需要很长时间才能运行,那么有什么方法可以一次完成多个请求吗?我知道,如果我用$ .ajax()做一个for循环,它会一次启动它们。我怎么能得到这个行为与PHP或有没有其他的批处理?
单个请求很简单(就像你注意到的一样)。 Justloop通过和使用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库,但它更futz处理:Header only retrieval in php via curl
然而,要做到这一点的同时使用PHP,你需要使用像exec()这样的东西来分离其他的PHP脚本,因为PHP本身并不支持线程化编程或并发性。同样,你也可以使用某种自定义的工作/工作者队列使用减速机或其他东西,但这很相关。
使用curl_multi_*
功能。请参阅http://www.php.net/manual/en/function.curl-multi-exec.php
小心!如果您知道这需要很长时间,那么您可能会请求数百或数千个网址。一定不要压倒目标服务器。
另请注意,根据在目标上运行的代码,HEAD
请求需要完成的工作量可能与GET
请求完全相同。所以唯一的优化是不将数据传输给你。这可能被误认为是拒绝服务攻击。