Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 比get_headers()更快的东西_Php_Mysql_Http Status Codes_Fsockopen_Get Headers - Fatal编程技术网

Php 比get_headers()更快的东西

Php 比get_headers()更快的东西,php,mysql,http-status-codes,fsockopen,get-headers,Php,Mysql,Http Status Codes,Fsockopen,Get Headers,我正在尝试制作一个PHP脚本,它将尽可能快地检查网站的HTTP状态 我目前正在使用get_headers()并在mysql数据库的200个随机URL的循环中运行它 要检查所有200个,平均需要200米48秒 我能做些什么使它(更快)吗 (我知道fsockopen-它可以在20秒内检查200个站点上的端口80-但这与请求http状态码不同,因为服务器可能会在端口上响应-但可能无法正确加载网站等) 这是密码 <?php function get_httpcode($url) { $

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

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

要检查所有200个,平均需要200米48秒

我能做些什么使它(更快)吗

(我知道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库。您可以使用同时发送多个请求

例如:

$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);
已更新


看看这个例子

> P>我不知道这是一个你可以考虑的选项,但是你可以用叉子几乎全部运行它们,这样脚本只会比一个请求长一点。

例如,您可以将其添加到以cli模式运行的脚本中,并同时启动所有请求


编辑:您说您要拨打200个电话,因此您可能会遇到数据库连接丢失的情况。问题是由于第一个脚本完成时链接被破坏。为了避免这种情况,您可以为每个子级创建新连接。我看到您正在使用标准的mysql_*函数,因此请确保传递第4个参数,以确保每次都创建一个新链接。还要检查服务器上同时连接的最大数量

您好,我也尝试过使用cURL,就像您发布的代码一样。但它是一样的,实际上比get_headers()长一点;尝试提出多重请求,因为我给出了上面的链接。例如,每次10个请求+1个不错的请求!我不知道curl扩展可以并行处理请求。并行?那么,这有效地是另一个线程同时运行吗?您可以使用multi-curl一次执行所有200个请求。响应速度与最慢的服务器一样慢。如果其中一个需要60秒,那么整个请求将需要60秒。但是你可以在curl中设置一个超时。这就是我想要的-我会看看你的链接,谢谢。@MattClarke好的,我很高兴你发现它很有用。。你需要在迭代中运行fork,在迭代中获得结果并ping站点(如果你是孩子)或继续(如果你是父母)我没有听你的话-这种fork业务对我来说是全新的,我甚至不知道它是可能的。@MattClarke it更新了答案,讨论了使用fork时的一个常见问题。。第一次看起来有点复杂是正常的。。如果您决定使用此选项(了解这些系统),您将在php手册页(答案中的链接)上找到很好的资源。。在该页面的评论中可以找到很多好的想法谢谢-我希望能+1你,但是没有足够的代表!