Scriptorama.nl

Header image showing a keyboard, mouse, laptop and books on design patterns

HTTP response headers & PHP stream wrappers

Van het weekend was ik aan het spelen met de Twitter API en liep, ondanks een caching constructie, op een gegeven moment toch tegen het rate limit aan; je mag vanwege de performance problemen eerder dit jaar momenteel max. 20 requests per uur naar de Twitter API doen.

De Twitter API geeft dit aan met een HTTP 400 response code. Ik kon dit alleen niet goed detecteren want fopen() retourneert alleen maar FALSE en ik wilde graag de daadwerkelijke HTTP response code hebben.

Het feit dat je PHP dan toch al behoorlijk wat jaartjes gebruikt houdt niet in dat PHP dan ook geen verrassingen meer voor je heeft. Sowieso aangezien er behoorlijk wat toegevoegd wordt aan PHP, maar ook omdat er soms gewoon rare, verstopte, dingen in PHP zitten. Het detecteren van de HTTP response headers bij een mislukt HTTP request is daar wat mij betreft een van.

(more...)

Timeouts en PHP streams

In "POST request maken zonder CURL" beschreef ik hoe je vanuit een PHP script een formulier kon posten zonder dat je daarvoor de CURL extensie voor nodig had. Daarbij had ik een ding nog niet besproken en dat is het feit dat zo'n website ook down of slecht bereikbaar kan zijn.

Je hebt het vast wel eens aan de hand gehad: je communiceert met een andere server voor SMS of betalingen en op een dag, om wat voor reden dan ook, blijft jouw site ineens hangen. Uiteindelijk kom je er achter dat de andere server niet te bereiken was, maar je script bleef het toch proberen. In dit artikel leer je hoe je met timeouts kunt werken wanneer je met andere servers communiceert.

(more...)

Een POST request maken zonder CURL

Soms moet je vanuit een PHP script communiceren met een ander site. Denk aan een SMS gateway of een payment gateway. Bij dergelijke webservices is het meestal de bedoeling dat je via HTTP POST een stukje XML die kant op stuurt.

Wanneer je vanuit je PHP script een HTTP POST request moet maken wordt er al snel geroepen dat je de CURL library moet gebruiken. Nu is er niets mis met die library, maar sommige hosters hebben die nu eenmaal niet meegenomen in hun configuratie. In dit artikeltje zie je hoe je zonder CURL of andere externe libraries een HTTP POST request kunt maken.

(more...)

PHP stream wrappers

Op het weblog van Tri Pham vinden we vandaag een interessant verhaal over hoe PHP stream wrappers veiligheids lekken kunnen veroorzaken bij includes die gegenereerde bestandsnamen gebruiken. Als er niet voldoende gecontroleerd wordt op de bestandsnaam zou je zomaar eens een PHP stream wrapper kunnen activeren.

Moraal van het verhaal? Controleer altijd of een gegenereerde bestandsnaam wel uit geldige karakters bestaat als je aan het automagisch includen gaat. Zo zijn : en /, 2 karakters die gebruikt worden om het gebruik van een php stream wrappers aan te geven, geen geldige karakters voor in een bestandsnaam. Door bijvoorbeeld basename() te gebruiken op de bestandsnaam kun je al een hoop ellende voorkomen.