3

ドメインにpingを実行し、応答時間をリクエストの合計サイズとともに一覧表示するphpスクリプトを作成したいと思います。

これは、Webサイトのネットワークを監視するために使用されます。私はそれを試してみました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を使用してWebサイトにpingを実行するためのより良い方法はありますか?

4

7 に答える 7

5

明らかに、curlにはあらゆる種類の優れた機能がありますが、次のようにコマンドラインから呼び出すことで、組み込みのツールをいつでも利用できることを忘れないでください。

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

覚えておくべきことは、これはカールのようにクロスプラットフォームになることはないということです。カール拡張機能もデフォルトでは有効になっていませんが。

于 2009-07-20T19:59:01.383 に答える
2

ワンタイムタスクのクイックスクリプトを実行するときは、exec()wget:

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

シンプルでリダイレクトを処理します。

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

于 2009-07-20T19:58:16.957 に答える
1

Curl / Fopenについてはよくわかりませんが、このベンチマークでは、file_get_contentsの方がfopenよりもパフォーマンスが優れていると示されています。

于 2009-07-20T19:58:59.450 に答える
0

xmlrpc(xmlrpc_client)を使用できます。カールすることの長所/短所が何であるかわからない。

Drupalはこの目的のためにxmlrpcを使用します(pingモジュールを見てください)。

于 2009-07-20T19:48:00.643 に答える
0

If remote fopen is enabled, file_get_contents() will do the trick too.

于 2009-07-20T20:04:23.387 に答える
0

カールの使用は問題ありません。

ただし、そのuseragent文字列を使用するかどうかはわかりません。特に必要がない限り、カスタムのものを作成してください。

于 2009-07-20T19:51:07.843 に答える
0

多分この梨Net_Pingはあなたが探しているものです。それはもはや維持されていませんが、機能します。

于 2009-07-20T19:53:15.267 に答える