我想创建一个用于ping域的php脚本,并列出响应时间以及请求的总大小。
这将用于监控网站网络。我用curl
试了一下,这是我到目前为止的代码:
function curlTest2($url) {
clearstatcache();
$return = '';
if(substr($url,0,4)!="http") $url = "http://".$url;
$userAgent =
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, 15);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
$execute = curl_exec($ch);
// Check if any error occured
if(!curl_errno($ch)) {
$bytes = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
$total_time = curl_getinfo($ch, CURLINFO_TOTAL_TIME);
$return = 'Took ' . $total_time . ' / Bytes: '. $bytes;
} else {
$return = 'Error reaching domain';
}
curl_close($ch);
return $return;
}
这里有一个使用fopen
function fopenTest($link) {
if(substr($link,0,4)!="http"){
$link = "http://".$link;
}
$timestart = microtime();
$churl = @fopen($link,'r');
$timeend = microtime();
$diff = number_format(((substr($timeend,0,9)) + (substr($timeend,-10)) -
(substr($timestart,0,9)) - (substr($timestart,-10))),4);
$diff = $diff*100;
if (!$churl) {
$message="Offline";
}else{
$message="Online. Time : ".$diff."ms ";
}
fclose($churl);
return $message;
}
有没有更好的方法使用php ping网站?
答案 0 :(得分:5)
显然curl有很多很酷的东西,但请记住,你总是可以通过从命令行调用它们来使用内置工具,如下所示:
$site = "google.com";
ob_start();
system("ping " . escapeshellarg($site));
print ob_end_flush();
唯一需要记住的是,这不会像卷曲那样跨平台;虽然默认情况下没有启用curl扩展名。
答案 1 :(得分:2)
在为一次性任务执行快速脚本时,我只是exec()wget:
$response = `wget http://google.com -O -`;
这很简单,可以处理重定向。
如果您正在使用suhosin补丁和卷曲,您可能会遇到http重定向(301,302 ...)的问题, suhosin不会允许它。
答案 2 :(得分:1)
我不确定Curl / Fopen但是this基准测试表明file_get_contents的性能比fopen好。
答案 3 :(得分:0)
您可以使用xmlrpc(xmlrpc_client)。不确定卷曲的优点/缺点是什么。
Drupal使用xmlrpc来实现此目的(查看ping模块)。
答案 4 :(得分:0)
使用curl很好。
不确定我是否会使用该useragent字符串。而是制作一个自定义的,除非你特别需要。
答案 5 :(得分:0)
也许这个梨Net_Ping正是你要找的。它不再维护,但它有效。
答案 6 :(得分:0)
如果启用了远程fopen,file_get_contents()
也会起作用。