Autor Zpráva
Katry
Profil
Ahoj,
Už dlouho hledám status, který mi bude vypisovat počet hráčů na serveru. Jeden takový jsem našel ale bohužel když je server offline, tak jen vypíše Error a pár řádků kódu. PhP moc nerozumm tak bych chtěl poprosit jestli je tu někdo takový kdo by to zvládl upravit.. Potřebuj ujen aby v případě vypnutí serveru status místo pořet hráčů ukazoval " Offline" předem díky



<?

$ip = 'mojeip';
$port = 'port';

$fp = fsockopen('udp://' . $ip, $port, $errno, $errstr);
if (!$fp)
{
echo "<tr><td>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 '' . $plr_count . ' / ' . $max_plrs . ''."";


fwrite($fp, $packet.'c');
fread($fp, 11);
$plr_count = ord(fread($fp, 2));
if ($plr_count > 0)
{
for ($i=0; $i<$plr_count; $i++)
{
$strlen = ord(fread($fp, 1));
$plrname = fread($fp, $strlen);
$score = samp_getLong2(fread($fp, 4));

}

}
fclose($fp);
}
?>

<?

function samp_getLong2($dat) {
$num=0;
if ((ord(substr($dat,3,1)) & 128) > 0) {
for ($i=0; $i<strlen($dat); $i++) {
$num-=((255-ord(substr($dat,$i,1))) << 8*$i);
}
$num--;
} else {
for ($i=0; $i<strlen($dat); $i++) {
$num+=(ord(substr($dat,$i,1)) << 8*$i);
}
}
return $num;
}

?>

BetaCam
Profil
Katry
Střílím od pasu. Místo :

echo "<tr><td>Socket Error: $errno - $errstr</td></tr>\n";


dej

echo "<tr><td>Offline</td></tr>\n";
Katry
Profil
Bohužel to dělá to samé.. Asi 5 minut se stránka načítá a pak to vypíše Error jako před tím
BetaCam
Profil
a co to přesne napíše?? Ono pokud to vyhazuje nějakou chybu tak to také s velkou pravdepodobností píše na jakém řádku v jakém souboru atd.
Popsání chyby slovy " vypíše se chyba + nějaký kód " není zrovna moc výstižné
Medvídek
Profil
Katry
A jakej error ? Neni to chybove hlaseni php ?
Katry
Profil
Momentálně to nevypíše nic.. jen po 5 minutovém čekání se objeví čistě bílá stránka. Takže se kvůli tomu vůbec nenačte web
TomášK
Profil
Zkus doplnit parametr k fsockopen:
$fp = fsockopen('udp://' . $ip, $port, $errno, $errstr, 10);


Předpokládám, že se skript zasekne tam - čeká na odezvu od serveru, ale ta nepřijde a on čeká a
čeká... v této podobě je limit nastaven na 10s, poté by to měl vzdát a vypsat offline.
Katry
Profil
po 5 minutách to vypíše toto

Warning: fread() [function.fread]: Length parameter must be greater than 0 in /amd/10.9.0.10/home/export/html/z-zone.sk/public_html/_sub/samp/t/includes/banner.php on line 32

Warning: fread() [function.fread]: Length parameter must be greater than 0 in /amd/10.9.0.10/home/export/html/z-zone.sk/public_html/_sub/samp/t/includes/banner.php on line 34

Warning: fread() [function.fread]: Length parameter must be greater than 0 in /amd/10.9.0.10/home/export/html/z-zone.sk/public_html/_sub/samp/t/includes/banner.php on line 36
0 / 0 



AM_
Profil
Ikdyž PHP moc nerozumíš tak kdyby sis tu hlášku přeložil a trochu se snažil, tak bys na to přišel:
length parameter must be > 0, to znamená, že na daném řádku má u funkce fread parametr length (druhý) velikost "0", takže zřejmě dochází k nějaké chybě při čtení ze zařízení nebo ten skript špatně zpracovává protokol.

Doufám, že proměnné $ip a $port jsi si nastavil podle potřeby a tady je jen zakryl, že v ostrém kódu nemáš port 'port' a ip 'mojeip' :)

Když PHP moc nerozumíš, zřejmě jsi kód nepsal sám, tak se dál zkus ptát autora kódu, v čem je problém, ten o tom má vědět víc, než my všichni tady dohromady.
Cargas
Profil
<?

$ip = 'mojeip';
$port = 'port';

@$fp = fsockopen('udp://' . $ip, $port, $errno, $errstr);
if (!$fp)
{
echo "Offline";
}
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 '' . $plr_count . ' / ' . $max_plrs . ''."";


fwrite($fp, $packet.'c');
fread($fp, 11);
$plr_count = ord(fread($fp, 2));
if ($plr_count > 0)
{
for ($i=0; $i<$plr_count; $i++)
{
$strlen = ord(fread($fp, 1));
$plrname = fread($fp, $strlen);
$score = samp_getLong2(fread($fp, 4));

}

}
fclose($fp);
}
?>



mozna to bude fungovat
Katry
Profil
vypsalo to tu samou chybu

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: