Portál AbcLinuxu, 5. května 2024 16:27


Dotaz: Jak zjisti konektivitu z PHP

20.11.2013 01:13 Petr
Jak zjisti konektivitu z PHP
Přečteno: 623×
Odpovědět | Admin
Zdravím, snažím se nějak zjisti zda je php (server) připojen na net. Našel jsem spousty řešení, ale ani jedno nefunguje. Například když zavolám
@fsockopen("www.google.com", 80, $errno, $errstr, 2);
a nejsem připojen k netu trvá mi odpověd 30 vteřin a pak to stejně skončí chybou. Já bych tomu chtěl dám max vteřinu dvě a pak to přerušit a jet dál, ale vůbec nevím jak na to. Díky
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

20.11.2013 01:21 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Jak zjisti konektivitu z PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co třeba curl?
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
20.11.2013 08:45 Filip Jirsák
Rozbalit Rozbalit vše Re: Jak zjisti konektivitu z PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Máte nastaveno, že se na spojení má čekat 2 sekundy (5. parametr). Jenže používáte DNS název, který se nejprve musí přeložit – a na ten překlad se asi čeká těch 30 sekund.

Ale rozhodně není dobré to takhle testovat na nějakém veřejném serveru, který vám nepatří nebo se kterým nejste dohodnutý. Dále navázání TCP/IP spojení, ještě na adresu určenou DNS názvem, je docela drahá operace (pro obě strany). A „zda je připojen na net“ je dost vágní zadání – raději byste měl testovat přesně to, co potřebujete.

Ten PHP skript se spouští z cronu nebo z příkazové řádky? Protože pokud je to normální skript spouštěný v rámci webového serveru, je jasné, že nějak připojen na net ten server je – minimálně s ním dokázal navázat spojení klient. (Což také může být spojení ze 127.0.0.1, ale někdy se i existence libovolného síťového rozhraní považuje za „připojen na net“). Takže bych doporučil ujasnit si, proč to „připojení na net“ chcete testovat, a test pak specifikovat lépe.
22.11.2013 15:01 Petr
Rozbalit Rozbalit vše Re: Jak zjisti konektivitu z PHP
Dobrý den, to mě nenapadlo že to dělá ten DNS a zní to logicky, zkusím to tedy na IP adresu. Jde o to, že se to volá normálně za běhu webové stránky (intranetu) který běží uvnitř sitě. Jde o to že to bude běhat vždycky i když nebude fungovat net, ale pokud funguje net tak se pošlou nějaká data ven. A pokud net nejde tak to ale má normálně fungovat, což nefunguje právě protože to po 30 vteřinách umře. Pokud někoho napadá leší řešení budu jedině rád, ale zatím ně nic nenapadá. Díky Jednoduše jde o toto:
if($intenretConnection){
   // posli data ven (treba přez curl to už je fuk)
} else {
   // nedělej nic, ale jed dál, hlavne nečekej déle než 2 vteřiny
}

Josef Kufner avatar 22.11.2013 17:11 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak zjisti konektivitu z PHP
Nezkoumej, zda funguje nebo nefunguje připojení. Nastav rozumné timeouty a prostě to zkus.

Druhou možností je zařadit požadavek do fronty a mít démona, který to bude odesílat asynchroně.
Hello world ! Segmentation fault (core dumped)
22.11.2013 20:03 Filip Jirsák
Rozbalit Rozbalit vše Re: Jak zjisti konektivitu z PHP
Přesně tak. Navíc to, že je dostupný (třeba) Google neznamená, že bude dostupná i služba, kam to posíláte.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.