比get_headers()快的东西 [英] Something faster than get_headers()

查看:203
本文介绍了比get_headers()快的东西的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试制作一个PHP脚本,该脚本将尽快检查网站的HTTP状态.

我当前正在使用get_headers()并在mysql数据库中的200个随机url循环中运行它.

要检查全部200个-平均需要2m 48s.

我能做些什么使它更快吗?

(我了解fsockopen-它可以在20秒钟内检查200个站点上的端口80-但与请求http状态代码不同,因为服务器可能会在该端口上进行响应-但可能无法正确加载网站等)

这里是代码.

<?php
  function get_httpcode($url) {
    $headers = get_headers($url, 0);
    // Return http status code
    return substr($headers[0], 9, 3);
  }

  ###
  ## Grab task and execute it
  ###


    // Loop through task
    while($data = mysql_fetch_assoc($sql)):

      $result = get_httpcode('http://'.$data['url']);   
      echo $data['url'].' = '.$result.'<br/>';

    endwhile;
?>

解决方案

您可以尝试使用CURL库.您可以同时使用 CURL_MULTI_EXEC 并行发送多个请求>

示例:

$ch = curl_init('http_url'); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
$c = curl_exec($ch); 
$info = curl_getinfo($ch, CURLINFO_HTTP_CODE);
print_r($info);

已更新

看这个例子. http://www.codediesel.com/php/parallel-curl-execution/

I'm trying to make a PHP script that will check the HTTP status of a website as fast as possible.

I'm currently using get_headers() and running it in a loop of 200 random urls from mysql database.

To check all 200 - it takes an average of 2m 48s.

Is there anything I can do to make it (much) faster?

(I know about fsockopen - It can check port 80 on 200 sites in 20s - but it's not the same as requesting the http status code because the server may responding on the port - but might not be loading websites correctly etc)

Here is the code..

<?php
  function get_httpcode($url) {
    $headers = get_headers($url, 0);
    // Return http status code
    return substr($headers[0], 9, 3);
  }

  ###
  ## Grab task and execute it
  ###


    // Loop through task
    while($data = mysql_fetch_assoc($sql)):

      $result = get_httpcode('http://'.$data['url']);   
      echo $data['url'].' = '.$result.'<br/>';

    endwhile;
?>

解决方案

You can try CURL library. You can send multiple request parallel at same time with CURL_MULTI_EXEC

Example:

$ch = curl_init('http_url'); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
$c = curl_exec($ch); 
$info = curl_getinfo($ch, CURLINFO_HTTP_CODE);
print_r($info);

UPDATED

Look this example. http://www.codediesel.com/php/parallel-curl-execution/

这篇关于比get_headers()快的东西的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆