Я хочу создать 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?
Вы можете использовать xmlrpc ( xmlrpc_client ). Не знаете, какие преимущества / недостатки скручиваются.
Drupal использует xmlrpc для этой цели (посмотрите на модуль ping).
Очевидно, что у curl есть всевозможные классные вещи, но помните, вы всегда можете использовать встроенные инструменты, вызывая их из командной строки следующим образом:
$site = "google.com"; ob_start(); system("ping " . escapeshellarg($site)); print ob_end_flush();
Единственное, что нужно иметь в виду, это не будет такой кросс-платформой, как завиток. хотя расширение curl не включено по умолчанию ..
При выполнении быстрых сценариев для одноразовых задач я просто exec () wget:
$response = `wget http://google.com -O -`;
Это просто и позаботится о переадресации.
Если вы используете исправления и завиток suhosin, вы можете столкнуться с проблемами с перенаправлением http (301, 302 …), suhosin не позволит этого.
Я не уверен в Curl / Fopen, но этот тест говорит, что file_get_contents имеют лучшую производительность, а затем fopen.
Использование curl отлично.
Не уверен, что если бы я использовал эту строку useragent. Скорее сделайте заказ, если вам это не нужно.
возможно, эта груша Net_Ping – это то, что вы ищете. Он больше не поддерживается, но он работает.
Если удаленный fopen включен, file_get_contents()
также сделает трюк.