Autor | Zpráva | ||
---|---|---|---|
Katry Profil |
#1 · Zasláno: 27. 7. 2009, 23:36:08 · Upravil/a: Katry
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 |
#2 · Zasláno: 27. 7. 2009, 23:46:32
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 |
#3 · Zasláno: 27. 7. 2009, 23:55:47
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 |
#4 · Zasláno: 27. 7. 2009, 23:57:18 · Upravil/a: BetaCam
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 |
#5 · Zasláno: 27. 7. 2009, 23:57:42
Katry
A jakej error ? Neni to chybove hlaseni php ? |
||
Katry Profil |
#6 · Zasláno: 28. 7. 2009, 00:02:15
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 |
#7 · Zasláno: 28. 7. 2009, 00:41:47
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 |
#8 · Zasláno: 28. 7. 2009, 00:48:53 · Upravil/a: Katry
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 |
#9 · Zasláno: 28. 7. 2009, 10:59:11
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 |
#10 · Zasláno: 28. 7. 2009, 15:46:58
<?
$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 |
#11 · Zasláno: 28. 7. 2009, 16:13:37
vypsalo to tu samou chybu
|
||
Časová prodleva: 15 let
|
0