Пол дня убил на этот скрипт, и в итоге мало что получилось.
Проблема в загрузке php скрипта если сервер не отвечает, то он просто грузит страницу и все, надо сделать что бы выводил какой то текст с ошибкой.
Вот код.
<?
error_reporting(E_ALL ^ E_NOTICE);
$fp = @fsockopen("udp://$ip", $port, $errno, $errstr, 1);
if (!$fp)
{
echo "<tr><td bgcolor=\"#FFFFFF\">Socket Error: $errno - $errstr</td></tr>\n";
}
else
{
$packet = 'SAMP';
$packet .= chr(strtok($ip, '.'));
$packet .= chr(strtok('.'));
$packet .= chr(strtok('.'));
$packet .= chr(strtok('.'));
$packet .= chr($port & 0xFF);
$packet .= chr($port >> 8 & 0xFF);
fwrite($fp, $packet.'i');
fread($fp, 11);
$is_passworded = ord(fread($fp, 1));
$plr_count = ord(fread($fp, 2));
$max_plrs = ord(fread($fp, 2));
$strlen = ord(fread($fp, 4));
$hostname = fread($fp, $strlen);
$strlen = ord(fread($fp, 4));
$gamemode = fread($fp, $strlen);
$strlen = ord(fread($fp, 4));
$mapname = fread($fp, $strlen);
echo '<b>' . $hostname . '</b><br>'."\n";
echo '<b>Игроков</b>: ' . $plr_count . ' / ' . $max_plrs . '<br>'."\n";
echo '<b>Мод</b>: ' . $gamemode . '<br>'."\n";
echo '<b>Карта</b>: ' . $mapname . '<br>'."\n";
}
fclose($fp);
?>
Помогите кто понимает php =)
Спустя 18 минут, 33 секунды (5.06.2011 - 19:09) alex12060 написал(а):
<?php
error_reporting(E_ALL ^ E_NOTICE);
$fp = @fsockopen("udp://$ip", $port, $errno, $errstr, 1);
if (!$fp)
{
echo "<tr><td bgcolor=\"#FFFFFF\">Socket Error: $errno - $errstr</td></tr>\n";
die();
}
else
{
$packet = 'SAMP';
$packet .= chr(strtok($ip, '.'));
$packet .= chr(strtok('.'));
$packet .= chr(strtok('.'));
$packet .= chr(strtok('.'));
$packet .= chr($port & 0xFF);
$packet .= chr($port >> 8 & 0xFF);
fwrite($fp, $packet.'i');
fread($fp, 11);
$is_passworded = ord(fread($fp, 1));
$plr_count = ord(fread($fp, 2));
$max_plrs = ord(fread($fp, 2));
$strlen = ord(fread($fp, 4));
$hostname = fread($fp, $strlen);
$strlen = ord(fread($fp, 4));
$gamemode = fread($fp, $strlen);
$strlen = ord(fread($fp, 4));
$mapname = fread($fp, $strlen);
echo '<b>' . $hostname . '</b><br>'."\n";
echo '<b>Игроков</b>: ' . $plr_count . ' / ' . $max_plrs . '<br>'."\n";
echo '<b>Мод</b>: ' . $gamemode . '<br>'."\n";
echo '<b>Карта</b>: ' . $mapname . '<br>'."\n";
}
fclose($fp);
?>
Спустя 5 минут, 44 секунды (5.06.2011 - 19:15) Roman680 написал(а):
Нет, я так делал, не работает.
Спустя 25 минут, 24 секунды (5.06.2011 - 19:41) ИНСИ написал(а):
Roman680 попробуй так:
$fp = fsockopen("udp://$ip", $port, $errno, $errstr, 1);
if($fp === false || $errno != '') {
echo "<tr><td bgcolor=\"#FFFFFF\">Socket Error: $errno - $errstr</td></tr>\n";
} else {
$packet = 'SAMP';
$packet .= chr(strtok($ip, '.'));
$packet .= chr(strtok('.'));
$packet .= chr(strtok('.'));
$packet .= chr(strtok('.'));
$packet .= chr($port & 0xFF);
$packet .= chr($port >> 8 & 0xFF);
fwrite($fp, $packet.'i');
fread($fp, 11);
$is_passworded = ord(fread($fp, 1));
$plr_count = ord(fread($fp, 2));
$max_plrs = ord(fread($fp, 2));
$strlen = ord(fread($fp, 4));
$hostname = fread($fp, $strlen);
$strlen = ord(fread($fp, 4));
$gamemode = fread($fp, $strlen);
$strlen = ord(fread($fp, 4));
$mapname = fread($fp, $strlen);
echo '<b>' . $hostname . '</b><br>'."\n";
echo '<b>Игроков</b>: ' . $plr_count . ' / ' . $max_plrs . '<br>'."\n";
echo '<b>Мод</b>: ' . $gamemode . '<br>'."\n";
echo '<b>Карта</b>: ' . $mapname . '<br>'."\n";
}
fclose($fp);
Спустя 7 минут, 28 секунд (5.06.2011 - 19:48) Roman680 написал(а):
Не, так то же не идет. просто грузит потому что сервер не отвечает.
Спустя 48 минут, 10 секунд (5.06.2011 - 20:36) Игорь_Vasinsky написал(а):
а ты по больше собачек в скриптах пиши
Цитата |
echo "<tr><td bgcolor=\"#FFFFFF\">Socket Error: $errno - $errstr</td></tr>\n"; |
ошибку вернуло?
Спустя 2 минуты, 31 секунда (5.06.2011 - 20:39) Roman680 написал(а):
Нет не вернуло
Спустя 5 минут, 30 секунд (5.06.2011 - 20:44) Игорь_Vasinsky написал(а):
а ping до сервера вообще есть?
Спустя 1 минута, 29 секунд (5.06.2011 - 20:46) Roman680 написал(а):
Есть, все работает, если сервер не отвечает, php просто грузит, тем самым сайт не работает из-за этого, поэтому надо сделать что бы если сайт не отвечал, выводил текст с ошибкой и все.
Спустя 1 день, 18 часов, 29 минут, 53 секунды (7.06.2011 - 15:16) allplayer написал(а):
Если ты точно уверен, что результат не нулевой должен быть, то поставь сравнение. Если ничего нет-то выдать сообщение об ошибке и exit();