Autor Zpráva
keeehi
Profil
Dobrý večer
když pomocí funkce file_get_contents stáhnu třeba zdrojový kód seznamu file_get_contents(http://www.seznam.cz); vše proběhne v pořádku. problém, nastane ve chvíli, kdy se se pokusím stáhnou zdrojový kód třeba takhle file_get_contents(http://www.agedtghkjdasjdfgarfglkhafglu.cz); Tato adresa samozřejmě neexistuje a mě se objeví tato hláška: Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: No such host is known. in xxxxxxxxxxxxxxx\s.php on line 3

Warning: file_get_contents(http://www.kfsf.cz/) [function.file-get-contents]: failed to open stream: No error in xxxxxxxxxxxxxxx\s.php on line 3


pokoušel jsem se ověřovat existenci url přes get_headers, to se mi však nepovedlo.


Objevil se mi však další problém, že komunikace mezi servry, může být pomalá a funkce file_get_contents by se prováděla moc dlouho. Jak ji mám říct, že pokud se jí do 5ti vteřin nepodaří obsah stánout, tak se má na to vykašlat a vrátit třeba false?

Děkuji za odpovědi.
Mastodont
Profil
Pokud můžeš, tak použij CURL, jinak timeout je řešen v komentářích v manuálu:
http://cz.php.net/manual/en/function.file-get-contents.php
AM
Profil *
Existenci serveru s tímto jménem by šlo ověřovat přes gethostbyname. Pokud server existuje, vrátí funkce jeho IP, jinak vrátí tentýž řetězec, který jsi jí předal jako parametr (zvláštní chování, ale evidentně je to tak a může to posloužit).
keeehi
Profil
A dá se timeout řešit i nějak obecně? Nejen pro funkci file_get_contents. Třeba aby se blok příkazů do něčeho uzavřel a měl by určitá čas na to, aby se vykonal.
AM
Profil *
před cyklem si ulož aktuální time() do proměnné a při každém průchodu ji porovnávej s aktuálním time() :) U funkcí, které se "zaseknou", se to řeší u každé individuálně, jediné celkové řešení je php timeout celého skriptu, ale ten skončí fatal errorem, který se nedá nijak zachytit, takže je to trošku k ničemu.

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:

0