私は php スクリプトを書いたり見つけたりしましたが、なぜそれが機能するときと機能しないのか理解できません。スクリプトはゲーム サーバーに接続し、そこから情報を取得しようとします。
$ip = 'MyServer';
$port = 'OurPort';
$connect_ip = "udp://" . $ip;
$connect = fsockopen($connect_ip, $port, $errno, $errstr, 30);
socket_set_timeout ($connect, 1, 000000);
$send = "ÿÿÿÿ" . chr (0x02) . "getstatus";
fputs($connect, $send);
fwrite ($connect, $send);
$output = fread($connect, 1);
if(!empty($output)) {
do {
$status_pre = socket_get_status($connect);
$output = $output . fread($connect, 1);
$status_post = socket_get_status($connect);
} while ($status_pre['unread_bytes'] != $status_post['unread_bytes']);
};
$output = explode ('\\', $output);
var_dump($output);
次のような出力が機能しています。
array(149) { [0]=> string(20) "ÿÿÿÿstatusResponse " [1]=> ........ }
私は考えました:それを適切に行い、このような関数にラップしましょう(最初と最後の行を除いて、すべてのコードは同じままです)。これは、同じファイルにある限り機能します。しかし、関数「チェック」を新しいファイルに入れることができると思ったので、次の結果が得られました。
**status.php**
function check($ip, $port) {
$connect_ip = "udp://" . $ip;
$connect = fsockopen($connect_ip, $port, $errno, $errstr, 30);
socket_set_timeout ($connect, 1, 000000);
$send = "ÿÿÿÿ" . chr (0x02) . "getstatus";
fputs($connect, $send);
fwrite ($connect, $send);
$output = fread($connect, 1);
if(!empty($output)) {
do {
$status_pre = socket_get_status($connect);
$output = $output . fread($connect, 1);
$status_post = socket_get_status($connect);
} while ($status_pre['unread_bytes'] != $status_post['unread_bytes']);
};
$output = explode ('\\', $output);
var_dump($output);
}
**index.php**
include('status.php');
check('MyServer', 'OurPort')
しかし、何だと思いますか?出力は次のとおりです。
array(1) { [0]=> string(30) "ÿÿÿÿdisconnectÿÿÿÿdisconnect" }
それはどのように可能ですか?私はここで何を監視していますか? 奇妙なyのエンコーディングの問題ですか?