[PHP] File read functies

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer met PHP een .txt bestand van een andere server te lezen. Ik gebruik nu file_get_contents, wat op zich prima werkt. Als de site respond krijg ik de textfile terug als string, en als de site een 404 returned krijg ik FALSE terug.

Mijn probleem is echter het volgende: als de site offline is vanwege een storing (en de betreffende server heeft helaas veel downtime) kan mijn script het niet ophalen, maar in plaats van gelijk FALSE te returnen, loopt de hele browser vast tot de max_execution_time van 30 seconden is bereikt, waarna ik dus de time limit error krijg.

Mijn vraag: is er een functie die de browser niet laat vast lopen als de server niet respond? Ik heb al verschillende file functions geprobeerd maar ze lopen allemaal vast. Ik vond ook de eventuele oplossing set_time_limit, maar ik vraag me hierbij af of, als bij wijze van spreken iemand met een 56k modem de website bezoekt, die dan niet standaard een time limit error krijgt. 8)7

Heeft iemand enig idee wat de beste oplossing is voor dit probleem? :X

Acties:
  • 0 Henk 'm!

Verwijderd

Verbind via een socket, daarop kun je ongetwijfeld zelf de timeout instellen. Dan kun je kiezen om meteen over die socket een request te doen voor het bestand, en dan moet je mogelijk het resultaat zelf verwerken/decoderen of andere ongein uithalen. Wat je ook kunt doen is eerst kijken of die server online is, en dan pas te proberen het bestand te downloaden via de wrapper functies. Wel zo makkelijk, maar het gaat niet gegarandeerd goed. Als in de tussentijd de server onbereikbaar wordt heb je dan alsnog het probleem. Maar die kans is normaal gesproken ok wel heel erg klein.

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Nu online

orf

Met fsockopen kun je een timeout opgeven. Krijg je binnen de tijd geen data terug, dan kun je 'm afkappen en een error (oid) tonen.

edit: te laat :)

[ Voor 4% gewijzigd door orf op 21-09-2007 17:49 ]


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

http://php.net/file_get_contents
[Editors note: As of PHP 5.2.1 you can specify `timeout` context option and pass the context to file_get_contents()]

The only way I could get get_file_contents() to wait for a very slow http request was to set the socket timeout as follows.

ini_set('default_socket_timeout', 120);
$a = file_get_contents("http://abcxyz.com");

Other times like execution time and input time had no effect.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Okay, thanks! Ik zal het proberen op te lossen met jullie suggesties... Het enige probleem is dat ik moeilijk een offline server kan simuleren die NIKS respond, ook geen 404. Maar ik kom er wel uit ;) Bedankt!

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Verwijderd schreef op zondag 23 september 2007 @ 12:07:
Okay, thanks! Ik zal het proberen op te lossen met jullie suggesties... Het enige probleem is dat ik moeilijk een offline server kan simuleren die NIKS respond, ook geen 404. Maar ik kom er wel uit ;) Bedankt!
Ik anders wel ;) Gewoon een onbestaand domein pakken ;) , surf er even naar toe, vergewis je dat dat domein niet gekaapt is, en je hebt een offline server.

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Snake schreef op zondag 23 september 2007 @ 12:11:
[...]

Ik anders wel ;) Gewoon een onbestaand domein pakken ;) , surf er even naar toe, vergewis je dat dat domein niet gekaapt is, en je hebt een offline server.
niet kunnen resolven != offline server ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Snake schreef op zondag 23 september 2007 @ 12:11:

Ik anders wel ;) Gewoon een onbestaand domein pakken ;) , surf er even naar toe, vergewis je dat dat domein niet gekaapt is, en je hebt een offline server.
Uhm. Nee? Je hebt dan een domeinnaam waarvan niet bepaald kan worden met welk IP adres er eigenlijk verbinding moet worden gemaakt.
Dat is iets anders dan verbinding maken met een bepaald IP adres waarvan je weet dat het systeem offline is.

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Shit, da's waar ook, maar een willekeurig onbekend ip, want niet reageert, is dat dan wel een offline-server-simulatie?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Comgenie
  • Registratie: Oktober 2005
  • Laatst online: 12-09 13:09

Comgenie

Soms heb je dat

Erkens schreef op zondag 23 september 2007 @ 12:13:
[...]

niet kunnen resolven != offline server ;)
http://12.34.56.78 dan ;)

No animals were harmed in the making of this comment.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Detail: een timeout is anders dan een offline server. Een offline server heb ik natuurlijk al geprobeerd, en bij file_get_contents geeft dat "FALSE" terug, net zo snel als bij een online server de content teruggegeven wordt.

Acties:
  • 0 Henk 'm!

  • DataGhost
  • Registratie: Augustus 2003
  • Laatst online: 19-09 21:26

DataGhost

iPL dev

php1: sleep(10); file_get_contents(php2);
php2: sleep(50);

Dan kan je zien of je hetzelfde resultaat krijgt.

[ Voor 30% gewijzigd door DataGhost op 08-10-2007 10:47 ]


Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 20:33
Ik heb zelf ook dit probleem ondervonden. Ik heb het opgelost door een bestand via AJAX aan te roepen, wanneer het script een timeout oploopt of langer dan 20 seconden niet reageerd, dan geeft mijn script aan dat de server offline is.

Je zou natuurlijk ook kunnen pingen naar je server, om te zien of ie online is of niet.

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Alternatief kan je je natuurlijk ook afvragen of de file te cachen is en dan een ander proces de cache periodiek laten bijwerken. Als de site down is, merken jouw bezoekers niets. :)

{signature}

Pagina: 1