我寫了/發現了一個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的編碼問題嗎?
你說得對,當我調用函數時通過'ÿÿÿÿ'作爲參數,然後再次運行:check('ÿÿÿÿ',$ ip,$ port)。但我仍然不明白爲什麼。有沒有對此的解釋?它必須是某種編碼問題...... – andreas
發現我認爲的問題,所以我已經更新了我的答案。 – SnatchFrigate
fputs不是問題,但thx!我重讀了那個......問題是關於編碼。但我認爲這個問題已經解決,因爲它肯定是一個編碼問題。 – andreas