Scriptorama.nl

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

Gears 0.4: HttpRequest met Progress Events

Een van de meest populaire artikelen op Scriptorama is, nog steeds, het artikel over het tonen van een progressbar bij het uploaden van een bestand. In dat artikel gaat dat met een aparte PHP extensie en moet het Javascript deel iedere zoveel tijd aan een PHP script vragen hoe ver z'n upload is. Niet het meest efficiente, zeker niet als je wat meer gebruikers hebt die wat uploaden.

De mensen bij het W3C zijn ook eindelijk een beetje wakker geworden wat betreft het uploaden van bestanden en hebben een nieuwe draft geschreven: Progress Events. Hiermee vuurt de browser bij bijvoorbeeld uploads, iedere zoveel tijd een event af met daarin gegevens over hoe ver de upload gevorderd is.

Op dit moment ondersteunt van de browsers alleen Firefox 3.1 alpha 2 "Shiretoko" een implementatie van Progress events. Maar, niet getreurd, er is ook nog de browser plugin Gears die in versie 0.4 Progress Events implementeert en die is beschikbaar voor alle recente browsers! Laten we de upload progress bar nog eens opnieuw knutselen, maar dan met Gears.

(more...)

PHP 5.3: de PHAR extensie

Het heeft even geduurd, net als met namespaces, maar uiteindelijk is ook de PHAR extensie in de core distributie van PHP 5.3 terecht gekomen. De PHAR extensie, welke standaard wordt meegecompileerd in de nieuwe PHP versie, stelt je in staat al je PHP code te bundelen tot 1 PHAR bestand en de website ook direct uit dit bestand te serveren.

(more...)

Lazy Initialization voor Zend_Registry

In de reacties op mijn review van PHP|Architect's guide to Programming with Zend Framework werd gereageerd door de schrijver van het boek, Cal Evans. Een van mijn punten van kritiek was dat de schrijver een heel hoofdstuk gebruikt om een eigen Globals class te introduceren terwijl hier naar mijn mening in Zend Framework al een klasse voor beschikbaar was, namelijk het Zend_Registry.

Uit zijn reactie blijkt dat zijn voornaamste reden voor zijn Globals klasse een principe genaamd Lazy Initialization te zijn. In dit artikel introduceer ik je aan het Zend_Registry en laat ik zien hoe je Lazy Initialization kunt toepassen met Zend_Registry.

(more...)

PHP5: Een formulier verwerken met de filter extensie

Zoals je inmiddels vast wel weet heeft PHP 5.2 de nodige nieuwe goodies. In een vorig artikel beschreef ik al de nieuwe datum- en tijds functies die met PHP 5.2 worden meegeleverd en vandaag kijken we eens naar de filter extensie die ook sinds PHP 5.2 wordt meegeleverd.

De filter extensie biedt je als ontwikkelaar een paar hulpmiddelen om bijvoorbeeld cross-site-scripting tegen te gaan maar ook om te controleren of bepaalde data wel in het juiste formaat is.

(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...)

Hoe maak ik een File Upload progress bar met PHP ?

We hebben al eerder gelinkt naar artikelen die vertelden hoe je een file upload progressbar kon maken, maar deze vertelden dit op een enigzins hoog niveau zonder er bij te vertellen hoe alles nu precies in elkaar stak. Dus vandaag implementeren we op Scriptorama from-(bijna)-scratch een file upload progress bar met PHP, jQuery en een PHP extensie.

Update: Heb je niet de mogelijkheid om een nieuwe PHP module te installeren? Probeer het dan eens een file upload progress bar te maken met Google Gears!

(more...)

Hoe implementeer ik een simpel tagging systeem?

Tagging is simpelweg het toekennen van labels aan een item. Eigenlijk is dit een verkapte vorm van aan een item categorieën toekennen. Het grote verschil tussen categorieën en tags is dat tags veel vrijer zijn. Categorieën worden meestal vooraf gedefinieerd en later wordt hier een artikel aan gehangen. Bij tagging is het precies andersom. Je creëert een artikel, en hangt daar tags aan.

Bekende voorbeelden van tagging zijn te zien op Del.icio.us en Flickr. Het mooie hieraan is dat iedereen zijn/haar bookmarks / foto's een x aantal tags meegeeft, waardoor anderen deze foto's en bookmarks op basis van die tag kan vinden.

Naar mijn mening wordt tagging tegenwoordig te pas en te onpas gebruikt. Op websites als flickr en del.icio.us zijn er meerdere gebruikers die allen meerdere items taggen. Hierdoor krijg je al snel een community gevoel. Voor een één gebruiker website (portfolio, weblog, whatever) kan een tagcloud overbodig zijn, zeker als je toch maar over een x aantal onderwerpen schrijft. In dat geval is het gebruik van categorieën aan te raden. Waarom zou je als één gebruiker website toch kiezen voor een tagging systeem? Dit zou je kunnen doen doordat je visueel kan laten zien waar je interesse/kennis ligt, door middel van de text grootte.

Hoe maak je zo'n tag systeem? Onder de lees meer link een tutorial hoe je een dergelijk systeem bouwt.

(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...)