Régulièrement, des personnes me demande pourquoi atoum est codé en lowerCamelCase et non en UpperCamelCase. Et bien souvent, j'ai tendance à entendre à la fin de cette question (peut être à tort) le sous-entendu comme Symfony ou tout autre framework à la mode. Pour en finir une bonne fois pour […]
août 2012 (7)
lundi 27 août 2012
300 + 1 = 301
Je m'en suis aperçu tardivement, mais durant la semaine dernière, atoum, mon framework de tests unitaires simple, moderne et intuitif pour PHP ≥ 5.3 a commencé à être suivi par plus de 300 personnes. Il aura donc fallu un peu plus d'un an pour atteindre ce seuil symbolique qui a marqué l'histoire […]
vendredi 24 août 2012
Astuce à propos des notifications de OS X Mountain Lion
vendredi 24 août 2012. Mac OS X
Lorsque j'utilise mon MacBook Air, j'ai toujours mon client Twitter qui occupe le tiers droit de mon écran, sur toute sa hauteur. Mais depuis ma migration vers OS X Mountain Lion, cette configuration me posait un problème. En effet, les notifications venaient se superposer à mon client twitter, […]
mardi 21 août 2012
À propos de la SYNTEC
mardi 21 août 2012. Réfléxions
Ce blog est essentiellement un blog technique, et en tant que tel, je n'y ai jamais exprimé d'idées sortant de ce cadre.
Certes, de temps à autres, je me suis exprimé sur des sujets relatifs au métier d'informaticien au sens large, mais cela a toujours été très ponctuel.
Mais aujourd'hui, à la lecture de cet article, je me dis qu'il est peut être temps que cela change.
lundi 20 août 2012
Faire-part de naissance pour les geeks par un geek #2
lundi 20 août 2012.
Après 37 semaines de développement et donc avec presque 4 semaines d'avance par rapport au planning, nous sommes fier de vous annoncer que la version 0.0.1 de Lucile a été rendue publique ce samedi 18 août 2012 à 17h43. Elle est venue compléter la famille déjà composée des versions 7.1.0 de Valentin […]
vendredi 10 août 2012
unregister_shutdown_function() ?
vendredi 10 août 2012. Réfléxions › PHP
PHP dispose d'une function permettant de d'exécuter du code une fois que le script en cours d'exécution est terminée.
Cette fonction, nommée register_shutdown_function()
peut être très utile dans certain cas.
C'est par exemple grâce à elle qu'il est possible d'exécuter directement en faisant appel à PHP en ligne de commande un fichier contenant un ou plusieurs classes de tests unitaires, de la manière suivante :
# php path/to/unit/test/file
Son utilisation est très simple puisqu'il suffit de lui passer une fonction de rappel comme argument pour que cette dernière soit automatiquement appelée à la fin du script en cours d'exécution.
<?php register_shutdown_function(function() use (& $phpEstDeLaMerde) { echo 'PHP est de la merde !' . PHP_EOL; } ); echo 'Qu'est ce que PHP ?' . PHP_EOL; // « PHP est de la merde » s'affichera après « Qu'est ce que PHP ? » ?>
Cependant, elle a un gros inconvénient.
lundi 6 août 2012
Client FastCGI en PHP
lundi 6 août 2012. Réfléxions › PHP
La plupart du temps, PHP est utilisé en conjonction avec un serveur HTTP.
Dans ce cas, lorsque le serveur HTTP reçoit d'un client une requête nécessitant l'exécution d'un script PHP, il demande l'exécution du fichier en question à PHP et retourne son résultat au client.
Or, il existe plusieurs façon d'associer PHP à un serveur HTTP, via différentes SAPI.
Ainsi, PHP est par exemple la plupart du temps lié à apache via le module correspondant, tandis que des serveurs plus récents tel que nginx font appel à PHP via le protocole FastCGI.
Dans ce dernier cas, le script PHP est exécuté par un processus indépendant de celui du serveur HTTP et faisant office de serveur.
En tant que tel, il délègue donc l'exécution du script à l'un de ses processus fils et en retourne le résultat au serveur .
Afin d'optimiser les performances, ce serveur peut créer à l'avance lors de son démarrage un certain nombre de processus fils, afin de pouvoir répondre aux requêtes du serveur HTTP le plus rapidement possible.
De plus, il est tout à fait capable de créer des sous-processus supplémentaires en fonction de sa configuration et de la charge qu'il a à supporter.
Cette architecture est donc très efficace et offre de très bonnes performances, mais ce n'est pas son seul atout.