Ping站点并以PHP返回结果

我想创build一个小的IF过程来检查Twitter是否可用(例如不像现在),并返回true或false。

帮帮我 :)

function urlExists($url=NULL) { if($url == NULL) return false; $ch = curl_init($url); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if($httpcode>=200 && $httpcode<300){ return true; } else { return false; } } 

这是从这篇文章抓住如何检查url是否存在。 因为Twitter在维护时应该提供高于300的错误消息,或者404,这应该是完美的。

这里有一个:

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?lngWId=8&txtCodeId=1786

另一个:

 function ping($host, $port, $timeout) { $tB = microtime(true); $fP = fSockOpen($host, $port, $errno, $errstr, $timeout); if (!$fP) { return "down"; } $tA = microtime(true); return round((($tA - $tB) * 1000), 0)." ms"; } //Echoing it will display the ping if the host is up, if not it'll say "down". echo ping("www.google.com", 80, 10); 

使用shell_exec :

 <?php $output = shell_exec('ping -c1 google.com'); echo "<pre>$output</pre>"; ?> 

另一个选项(如果您需要/想要ping而不是发送HTTP请求)是PHP的Ping类 。 我为此写了它,它允许您使用三种支持的方法之一来ping服务器(某些服务器/环境只支持三种方法之一)。

用法示例:

 require_once('Ping/Ping.php'); $host = 'www.example.com'; $ping = new Ping($host); $latency = $ping->ping(); if ($latency) { print 'Latency is ' . $latency . ' ms'; } else { print 'Host could not be reached.'; } 

几乎每个操作系统都可以使用ping 。 所以你可以做一个系统调用并获取结果。

使用以下函数,您只需使用socket_create发送纯粹的ICMP数据包。 我从那里的用户注意到了下面的代码。 注意您必须以root身份运行以下内容。

虽然你不能把它放在一个标准的网页,你可以运行它作为一个cron工作,并填充数据库的结果。

所以如果你需要监控一个网站,这是最合适的。

 function twitterIsUp() { return ping('twitter.com'); } function ping ($host, $timeout = 1) { /* ICMP ping packet with a pre-calculated checksum */ $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost"; $socket = socket_create(AF_INET, SOCK_RAW, 1); socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0)); socket_connect($socket, $host, null); $ts = microtime(true); socket_send($socket, $package, strLen($package), 0); if (socket_read($socket, 255)) { $result = microtime(true) - $ts; } else { $result = false; } socket_close($socket); return $result; } 

这是我使用的PHP代码,答复通常是这样的:

    发送2个数据包,接收2个数据包,丢包0%,时间1089ms

所以我使用这样的代码:

  

     $ ping_how_many = 2;
     $ ping_result = shell_exec('ping -c'。$ ping_how_many。'bing.com');
     if(!preg_match('/'。ping_how_many。'received /',$ ping_result)){
       回声“不好的ping结果”。  PHP_EOL;
         // goto next1;
     }