phpmysqlhttp-status-codesfsockopenget-headers

Something faster than get_headers()


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;
?>

Solution

  • 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/