用php开发一个检测某网站是否在正常运行的小模块

WBOY
Freigeben: 2016-06-23 13:57:08
Original
1011 Leute haben es durchsucht

                    我的想法是构造一个http请求,看它返回的状态码。如果是200的话,证明这个网站是能正常访问的。

            使用了一个叫curl 的函数,能够获取状态码,
          但是发现了一个问题。当我只运行一次的时候能返回200代码,但是连续检测多个网站,就只返回0,如果网站不通,能返回404.
          可是正常网站还是返回0,有谁用过这个函数,能说说吗?
      


回复讨论(解决方案)

建议贴出你的代码以供分析。

$ch = curl_init();curl_setopt($ch,CURLOPT_URL,"http://bbs.csdn.net/topics/390781797");curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch, CURLOPT_HEADER, 1);$html = curl_exec($ch);curl_close($ch);list($header, $body) = explode("\r\n\r\n", $html, 2);var_dump(http_parse_headers($header));
Nach dem Login kopieren
Nach dem Login kopieren

http_parse_headers() 需要另外下载,参考:
http://stackoverflow.com/questions/6368574/how-to-get-the-functionality-of-http-parse-headers-without-pecl

$ch = curl_init();curl_setopt($ch,CURLOPT_URL,"http://bbs.csdn.net/topics/390781797");curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch, CURLOPT_HEADER, 1);$html = curl_exec($ch);curl_close($ch);list($header, $body) = explode("\r\n\r\n", $html, 2);var_dump(http_parse_headers($header));
Nach dem Login kopieren
Nach dem Login kopieren

http_parse_headers() 需要另外下载,参考:
http://stackoverflow.com/questions/6368574/how-to-get-the-functionality-of-http-parse-headers-without-pecl



$ch = curl_init();		$list1=array('www.baidu.com','www.taobao.com','www.alipay.com','localhost/kk/','www.yy.net');		curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);		curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);		curl_setopt($ch, CURLOPT_HEADER, 1);		for($i=0;$i<count($list1);$i++)		{		    curl_setopt($ch,CURLOPT_URL,$list1[$i]);		    curl_exec($ch);			echo $list1[$i];		    $httplist=curl_getinfo($ch,CURLINFO_HTTP_CODE);		    var_dump($httplist);		}				        curl_close($ch);
Nach dem Login kopieren

这个怎么样,我想批量检测,可是好像很慢,几秒后才有反馈

建议贴出你的代码以供分析。

恩,谢谢提醒

用get_headers函数也是可以的,如下DEMO

header('Content-Type:text/html;Charset=UTF-8');$result = @get_headers('http://www.qqhaowan.com');if ($result) {    print_r($result);    if (strpos($result[0], '200')) {        echo '网站能访问!';    } else {        echo '网站不能访问!';    }} else {    echo '目标URL无法打开!';}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

用get_headers函数也是可以的,如下DEMO

header('Content-Type:text/html;Charset=UTF-8');$result = @get_headers('http://www.qqhaowan.com');if ($result) {    print_r($result);    if (strpos($result[0], '200')) {        echo '网站能访问!';    } else {        echo '网站不能访问!';    }} else {    echo '目标URL无法打开!';}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren


嘿嘿,我试试

用get_headers函数也是可以的,如下DEMO

header('Content-Type:text/html;Charset=UTF-8');$result = @get_headers('http://www.qqhaowan.com');if ($result) {    print_r($result);    if (strpos($result[0], '200')) {        echo '网站能访问!';    } else {        echo '网站不能访问!';    }} else {    echo '目标URL无法打开!';}
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren



好像一上for循环就不行了。。

我的想法是构造一个http请求,看它返回的状态码。如果是200的话,证明这个网站是能正常访问的。

使用了一个叫curl 的函数,能够获取状态码,
但是发现了一个问题。当我只运行一次的时候能返回200代码,但是连续检测多个网站,就只返回0,如果网站不通,能返回404.
可是正常网站还是返回0,有谁用过这个函数,能说说吗?



测试过,可以循环检测。
<?php$sites = array('http://www.baidu.com','http://www.21cn.com','http://www.sina.com.cn','http://www.csdn.net');foreach($sites as $site){    echo $site.':'.checksite($site).'<br>';}function checksite($url){    $result = @get_headers($url);    if($result){        if(strstr($result[0], '200')!=''){            return true;        }        }    return false;}?>
Nach dem Login kopieren
Nach dem Login kopieren


我的想法是构造一个http请求,看它返回的状态码。如果是200的话,证明这个网站是能正常访问的。

使用了一个叫curl 的函数,能够获取状态码,
但是发现了一个问题。当我只运行一次的时候能返回200代码,但是连续检测多个网站,就只返回0,如果网站不通,能返回404.
可是正常网站还是返回0,有谁用过这个函数,能说说吗?


测试过,可以循环检测。
<?php$sites = array('http://www.baidu.com','http://www.21cn.com','http://www.sina.com.cn','http://www.csdn.net');foreach($sites as $site){    echo $site.':'.checksite($site).'<br>';}function checksite($url){    $result = @get_headers($url);    if($result){        if(strstr($result[0], '200')!=''){            return true;        }        }    return false;}?>
Nach dem Login kopieren
Nach dem Login kopieren


的确,可以了。难道是因为上面那个时间太短,没有得到回应?
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage