Autor Zpráva
AMD
Profil
Ahoj,

potřeboval bych v PHP funkci, která by ověřila, zda mám zaplej nebo vyplej počítač (asi pingem na IP - hodil by se timeout, třeba 1 sekunda) a v závislosti na tom ukázala ikonku :-) Takovej status :-) Hledal jsem "ping" v seznamu funkcí na PHP.net, ale nic relevantního jsem nenašel. Nechci žádný tank na mravence, jen mini funkci. Poraďte prosím.

Díky...
sslavo
Profil
hmm myslis ako ten na Icq?
ked nieco najdes tak budemem vsetci radi
AMD
Profil
V podstatě jo - s tím rozdílem, že bude rozlišovat jen online a offline...
thingwath
Profil
system() :-)
AMD
Profil
:-) To mi na serveru bohužel neprojde...
sslavo
Profil
a v system() aky prikaz pouzijes?
thingwath
Profil
Rozhodně ti to projde spíš, než získání přístupu k surovému soketu, který pro poslání toho icmp echo requestu potřebuješ (hint: superuser only).
thingwath
Profil
sslavo
ping mi nepřijde jako špatná volba...
AMD
Profil
Aha. Sakra, tak jak já to jen udělám... :-/
thingwath
Profil
Jestli je ten počítač tvůj, tak přes něco nad UDP nebo TCP.
AMD
Profil
Kdyby byl můj, tak neřeším, zda mi projde system() a prostě to jen povolím ;)
thingwath
Profil
Myslím ten který chceš zjišťovat zda žije.
AMD
Profil
Aha, ten můj je.

Mimochodem, přes Python mi i ten system() projde, ale ping: command not found. Božemuj...
thingwath
Profil
Tak tam možná ping nemají, proč taky, ona to není zase tak nepostradatelná věc. Nebo je někde pryč, aby to nemohl pouštět každý.
thingwath
Profil
Něco-jako-ping lze tedy udělat přes službu echo (kterou musíte samozřejmě na sledovaném stroji zapnout, je to někde i ve windows, ale nevím kde). Pak už je to snadné. Podotýkám, že jde o UDP verzi echa (datagram, dgram...), když zapnete TCP variantu, nepůjde to :-)


<?

$x = socket_create (AF_INET, SOCK_DGRAM, 0);
socket_connect ($x, "localhost", 7);
socket_write ($x, "jsi tam?");
socket_set_nonblock ($x);
socket_select ($pole = array ($x), $w = NULL, $e = NULL, 10);
$data = socket_read ($x, 8);

echo $data;
?>


V ideálním případě to vypíše 'jsi tam?', což znamená, že stroj běží, v případě že neběží, počká to 10 sekund a nevypíše to nic, pokud běží počítač ale ne služba, seřve vás PHP (ošetřete si to). Šlo by to samozřejmě napsat líp.

(jestli jste si tenhle kousek kódu zkopírovali s osmičkou v connectu a nejde vám, má tam samozřejmě být 7)
AMD
Profil
Jo, stačilo jen přidat do /etc/xinetd.conf:
enabled = echo-dgram
a restartovat xinetd:
/etc/init.d/xinetd restart
a už to jede. Díky! :)
AMD
Profil
Jede, ale jen z localhostu na localhost. Ze serveru na mou IP to nejde :( Zkusím se zeptat admina...
Toto téma je uzamčeno. Odpověď nelze zaslat.