0

特定のポートでIPをpingし、サーバーがオンラインかオフラインかをエコーアウトするPHPスクリプトを実装しようとしています。このようにして、ユーザーはサーバーへのアクセス不能がサーバーの障害なのか、それとも自身のネットワークの問題なのかを確認できます。

このサイトは現在http://Dev.stevehamber.comにあります。「オンライン」が「PHP」のクラスにラップされていることがわかります。サーバーがオンラインかオフラインかを反映するためにこれが必要です。アプリケーションはポートTCP=25565で実行されるため、このポートに到達できるかどうかを示す出力が必要です。

これが私が探しているものであると私が見つけたスニペットです:

<?php

$host = 'www.example.com';
$up = ping($host);

// if site is up, send them to the site.
if( $up ) {
        header('Location: http://'.$host);
}
// otherwise, take them to another one of our sites and show them a descriptive message
else {
        header('Location: http://www.anothersite.com/some_message');
}

?>

このようなものを自分のページに複製するにはどうすればよいですか?

4

1 に答える 1

4

質問へのコメントに基づいて、fsockopen()このタスクを実行するための最も簡単で最も広く利用可能な方法です。

<?php

    // Host name or IP to check
    $host = 'www.example.com';

    // Number of seconds to wait for a response from remote host
    $timeout = 2;

    // TCP port to connect to
    $port = 25565;

    // Try and connect
    if ($sock = fsockopen($host, $port, $errNo, $errStr, $timeout)) {
        // Connected successfully
        $up = TRUE;
        fclose($sock); // Drop connection immediately for tidiness
    } else {
        // Connection failed
        $up = FALSE;
    }

    // Display something    
    if ($up) {
        echo "The server at $host:$port is up and running :-D";
    } else {
        echo "I couldn't connect to the server at $host:$port within $timeout seconds :-(<br>\nThe error I got was $errNo: $errStr";
    }

これは、サーバーがTCP:25565で接続を受け入れているかどうかをテストするだけであることに注意してください。このポートでリッスンしているアプリケーションが実際に探しているアプリケーションであるか、または正しく機能していることを確認するために何もしません。

于 2012-08-14T16:42:03.110 に答える