Я написал / нашел скрипт 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?