3

顧客の 1 人は、fsockopen() を使用してサーバーがオンラインかどうかを判断する非常に単純なスクリプトを持っていると言いました。彼らは最近まで私たちを通して彼らのウェブサイトでうまくいったと言っていましたが、最近は動かなくなったので、それは設定だと思います.

私が最初に考えたのは、彼はそれを TCP として使用し、IP/ポートをゲーム サーバーに使用していたということでしたが、彼と私はスクリプトが他のさまざまな Web ホストから正常に動作することを確認しました。

特に私たちの問題は何ですか?

動作: http://crazygfl.xfactorservers.com/query.php?ip=www.xfactorservers.com&port=80

作品: http://crazygfl-stats.com/query.php?ip=109.73.163.231&port=27015

動作しません: http://crazygfl.xfactorservers.com/query.php?ip=109.73.163.231&port=27015

これがコードです...

<?php

    $timeout = (isset($_GET['timeout']) ? ($_GET['timeout'] <= 0 ? 30 : ((int)$_GET['timeout'])) : 30);

    if(empty($_GET['ip'])&&empty($_GET['port'])){
        echo 'No IP/Port specified.';
    }else{
        if(fsockopen($_GET['ip'], $_GET['port'], $errno, $errstr, $timeout) === false){
            echo 'offline';
        }else{
            echo 'online';
        }
    }
4

2 に答える 2

4

上で引用した 3 つのホストはすべて同じマシン上にありますか、それとも別々のマシン上にありますか? それらの間の構成が一貫していない可能性があります。「fsockopen」が有効になっているかどうかを確認します。

 <?php
 if(function_exists('fsockopen')) {
      echo "fsockopen function is enabled";
 }
 else {
      echo "fsockopen is not enabled";
 }
 ?>

有効になっている場合は、ファイアウォール ルールが成功していないホストをブロックしているかどうかを確認します。

それができない場合は、スクリプトを cURL ベースの実装 http://ch.php.net/curlに移行し、それが問題の解決に役立つかどうかを確認してください。

于 2011-11-08T08:50:35.553 に答える
4

ホスティング会社が fsockopen 機能を無効にしているか、テストしようとしているポートで送信要求をファイアウォールで保護している可能性があります。その場合は、機能を再度有効にするか、ポートのブロックを解除するように依頼できますが、そうでない場合は、新しいホストに移動する以外に手段はほとんどありません.

ところで、ユーザー入力 ($_GET、$_POST など) から直接データを使用して、何の検証も行わないのは、非常に悪い考えです!

于 2011-11-08T08:39:00.387 に答える