Witam
Mam na nazwie prosty skrypt pobierający dane o serwerze CS. Pewnego razu przestał działać, więc napisałem do supportu.
To ten skrypt:
$ip = "194.109.69.51";
$fp = @fsockopen("udp://".$ip, 27015);
stream_set_timeout($fp, 10);
//stream_set_blocking($fp, 0);
fwrite($fp, "\xFF\xFF\xFF\xFFTSource Engine Query\x00");
$return = fread($fp, 100);
echo $return;
$data = stream_get_meta_data($fp);
print_r($data);
if($data['timed_out'])
{
die("Timed Out");
}
else
{
print_r($data);
}
I odpowiedź z nazwy:
zanim wykonuje Pan w skryptach operacje zapisu/odczytu z gniazda sieciowego
proszę zbindować się na swój adres IP.
Co to znaczy? W manualu PHP znalazłęm tylko bindowanie dotyczące serweru z którym się łączy przez alias.
Co mam zrobić?
BTW. Ten skrypt działa na unixstorm, więc jeśli mi nie pomożecie, zmieniam hosting.
W manualu coś było o bindzie i to wygląda tak:
$ip = "193.33.176.148";
$opts = array('socket' => array('bindto' => '85.128.153.53:0'));
$context = stream_context_create($opts);
$fp = @stream_socket_client("udp://".$ip.":27015", $errno, $errstr, 5, STREAM_CLIENT_CONNECT, $context);
stream_set_timeout($fp, 10);
//stream_set_blocking($fp, 0);
fwrite($fp, "\xFF\xFF\xFF\xFFTSource Engine Query\x00");
$return = fread($fp, 100);
echo $return;
$data = stream_get_meta_data($fp);
print_r($data);
if($data['timed_out'])
{
die("Timed Out");
}
else
{
print_r($data);
}
array('bindto' => 'IP:0')) - w to miejsce wstawiałem swoje IP, ip serwera, ip routera, ale nic nie działa. Dalej timeout
Jak to coś pomoże...
Wynik: Array ( [stream_type] => udp_socket [mode] => r+ [unread_bytes] => 0 [seekable] => [timed_out] => 1 [blocked] => 1 [eof] => ) Timed Out