2009-07-20 13 views
3

ドメインにpingを実行し、リクエストの合計サイズとともにレスポンスタイムをリストするPHPスクリプトを作成したいとします。phpを使用してウェブサイトをpingする

これは、ウェブサイトのネットワークを監視するために使用されます。私は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; 

} 

そして、ここでは

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; 

} 

fopenを使用して1であることは、PHPを使用してウェブサイトにpingを実行するためのより良い方法はありますか?

答えて

0

xmlrpc(xmlrpc_client)を使用できます。カールするメリットとデメリットが何であるかは不明です。

Drupalはこの目的でxmlrpcを使用します(pingモジュールを参照)。

+1

drupal.org/handbook/modules/pingについてお聞きしますか?それは私が探しているものに見えません... –

+0

私はまた、これを使用するとうまくいくと思います。賢明な推測では、このオプションは、単純なカールオプションと比べて、内部的に余分なxml解析を必要とするでしょうか?本当におなら。 –

0

カールを使用すると問題ありません。

このユーザーエージェント文字列を使用するかどうかはわかりません。むしろあなたが特に必要としない限り、カスタムを作る。

0

おそらくこの梨Net_Pingはあなたが探しているものです。それはもはや維持されませんが、それは動作します。

2

1時間の作業Iだけのexec()wgetのための迅速なスクリプトが実行する場合:

$response = `wget http://google.com -O -`; 

をそれは簡単ですし、リダイレクトの世話をします。

suhosinパッチとカールを使用している場合、httpリダイレクト(301,302 ...)で問題が発生する可能性があります。 suhosinは許可しません。

1

Curl/Fopenについてはわかりませんが、thisベンチマークでは、file_get_contentsのパフォーマンスが向上しています。

5

は明らかにカールさんは、クールなもののすべての種類を得たが、覚えて、あなたは、常にこのようなコマンドラインからそれらを呼び出すことによってツールに建てを利用することができます:心に留めておくべき

$site = "google.com"; 
ob_start(); 
system("ping " . escapeshellarg($site)); 
print ob_end_flush(); 

だけの事、このカールのようなクロスプラットフォームになることはありません。カール拡張機能はデフォルトでは有効になっていません。

+0

私はこのようにします。あなたが問題を見たなら、あなたが見ている結果が有効であると確信することができます。 – EvilChookie

+0

escapeshellarg()関数について聞いたことがありますか? http://ca.php.net/manual/en/function.escapeshellarg.php –

+0

この問題は、cURLのようにウェブサーバーが生存しているかどうかを調べるのではなく、サーバーにpingを実行しているかどうかを確認することです。また、cURLはサーバ固有ではなくサイト固有のものになります(仮想ホスト環境のテストに役立ちます)。 –

0

リモートfopenが有効になっている場合は、file_get_contents()もトリックを行います。

関連する問題