Met cURL kan je een hoop meldingen tevoorschijn toveren als een site down is:

Uit de log van het NOC-script die ik gebruik om mijn servers te monitoren, heb ik deze (helaas ;-) )gehaald:
- Connection refused
- Connection timed out

Welke meldingen bestaan er nog meer die aangeven als een site niet oproepbaar is?
HTTP status codes uit de 4xx reeks?

Dit klinkt trouwens als een soort van blacklist, kun je niet beter controleren of een aanroep slaagt en er anders vanuit gaan dat er iets mis is in plaats van andersom (checken op "alle" mogelijke foute situaties, want de vraag is dan, heb je alle gevallen bekeken)?

EDIT: alternatief :)
Het was meer vanuit nieuwsgierigheid, maar de beste reponsoe-check zou beter met een '200 OK' plaats kunnen vinden.

Ik neem van harte aan dat deze alleen teruggegeven wordt als de pagina ook daadwerkelijk door de webserver geserveerd wordt?
EEN pagina, niet per se DE pagina.

Als iemand een site zo in elkaar zet dat er een 404 pagina geserveerd wordt met status code 200 indien de oorspronkelijk gevraagde pagina niet kon worden gevonden dan kun je dit onderscheid niet maken.

Het is echter niet jouw taak noch jouw verantwoordelijkheid dat (wat voor) content (dan ook) op de juiste manier geserveerd wordt. Je kunt er alleen maar vanuit gaan dat de bouwers van de website dit netjes doen. Verder kun je alleen maar vertrouwen op de HTTP status codes en hopen dat eea netjes is geprogrammeerd. Maar ja, dit vertrouwen is vaak misplaatst :).

Soortgelijk probleem: RSS-feeds die pretenderen UTF-8 te zijn. Als je niet uit kunt gaan van de meegestuurde character encoding declaratie dan is het einde een beetje zoek :).
De 'verantwoordelijkheid van de gebruiker' snap ik wel, maar het gaat om mijn scripts, waarvan ik wil weten of die werken.

Daarom zal ik naar de statuscode kijken.
De enige manier om na te gaan of je scripts werken (bedoel je hiermee ook bijvoorbeeld of PHP "actief" is ofzo?) lijkt mij het stellen van een voorgedefinieerde vraag en vervolgens het voorgedefinieerde (of afleidbare) antwoord te controleren.

Voorbeeld: /test/sum.php?var1=2&var2=6
Verwacht antwoord: 8

EDIT: natuurlijk zijn je scripts complexer dan dat. Alternatief: zet al je code in een try-catch blok, throw een exception als er iets onverwachts gebeurt en voeg dan een header('HTTP/1.0 500 Internal Server Error'); toe?

Dit neemt niet weg dat de kans bestaat dat je code niet doet wat deze behoort te doen, simpelweg doordat er semantisch iets niet klopt ;-).
Of ze output geven (200 OK), en daarna de controle of de output aangeeft dat hij nog zijn data ontvangt (JSON result-stringetje). Dit lijkt me voldoende.

Reageren