Communiquer avec PHP en CLI (ligne de commande)

    21:57 30 11 2005

J’ai dernièrement ajouté des fonctionnalités de gestion des extensions PHP à WAMP5. Pour cela, j’ai créé quelques scripts PHP en CLI appelés par le gestionnaire de WAMP. Mais comment communiquer avec PHP, lui passer des paramètres ou encore interagir avec l’utilisateur?

Je me suis donc penché sur la question et voici mes conclusions.

Passer des paramètres à un script CLI :

Pour cela , il suffit de fournir ces paramètres lors de l’appel au script. Attention, on a l’habitude de les passer grâce à la syntaxe HTTP. Quelque chose du genre :

« php index.php?toto=valeur »

Cela ne fonctionnera pas en CLI, cette syntaxe est liée au protocole HTTP (méthode GET), PHP cherchera un fichier s’appelant « index.php?toto=valeur ». en ligne de commande, il suffira d’ajouter ces paramètres à la suite de l’appel au script :

« php index.php valeur »

On pourra alors accéder aux paramètres grâce aux tableaux $_SERVER['argv'] et $_SERVER['argc']. argc permettra de connaître le nombre de variables passées à PHP, argv permettra d’accéder à ces paramètres. Dans l’exemple précèdent

$_SERVER['argv'][0] vaudra « index.php »
$_SERVER['argv'][1] vaudra « valeur »

Interagir avec l’utilisateur lors de l’exécution du script :

Il peut arriver que l’on ait besoin de poser des question à l’utilisateur, récupérer des variables. Dans le cas de WAMP5, un des scripts permet d’ajouter une extension dans le php.ini, il faut donc que l’utilisateur puisse taper le nom de cette extension. Pour cela, il suffit d’utiliser l’entrée standard STDIN.

La commande

$newext_name = trim(fgets(STDIN));

permet de lire ce qui arrive de STDIN jusqu’à ce qu’il y ait un retour chariot. Concrètement, cela permet à l’utilisateur de taper tout ce qu’il veut jusqu’à ce qu’il tapes sur la touche Entrer. le contenu tapé est alors récupéré dans la variable $newext_name.
Un petit echo avant cette commande permettra de poser une question à l’utilisateur. Par exemple :

echo ‘Veuillez taper quelque chose :’;
$newext_name = trim(fgets(STDIN));

Le contenu tapé par l’utilisateur sera récupéré dans la variable $newext_name.

En conclusion, si vous voulez des exemples pratiques de ces méthodes, téléchargez la dernière version de WAMP5 (1.5.0 à l’heure où j’écris ce post) et regardez ce qui se trouve dans le répertoire scripts ;-)



PHP 5.1 sous windows : où est passé sqlite?

    11:25 26 11 2005

J’ai passé une partie de ma journée d’hier à préparer et compiler WAMP5 1.4.6 avec la dernière release de PHP, la très attendue 5.1.

Au départ, tout me semblait normal, une mise à jour sans problèmes jusqu’à ce que je teste SQLitemanager et là, page banche!
Que se passe t’il? La dernière version de cette application (1.1.3) serait-elle bugée? Je mets donc le nez dans le code et là, je me rends compte qu’il ne s’agit pas d’un problème de SQLitemanager mais que tout simplement le support de SQLite n’est plus activé dans PHP 5.1.

Après un coup d’oeil à l’annonce de la sortie de PHP 5.1, je vois un lien vers un guide de mise à jour proposé sur le site php.net.

C’est dans ce guide que je découvre que le support natif de SQLite n’est plus activé par défaut et se base maintenant sur PDO :

http://www.php.net/README_UPGRADE_51.php#db3

Pour réactiver le support de SQLite natif, il faut donc activer PDO (qui bizarrement n’est plus activé par défaut dans cette version Windows alors qu’elle l’était dans les versions RC), activer le support SQlite de PDO puis activer l’extension php_pdo :

extension=php_pdo.dll
extension=php_pdo_sqlite.dll
extension=php_sqlite.dll

A noter que le driver SQLite est donc maintenant passé en version 3.



Premier point sur PHP6 par le PHP Group

    14:56 23 11 2005

Suite à la réunion d’une partie du PHP Group lors du forum PHP 2005 qui se déroulait à Paris (à noter que le PHP Group ne s’était pas réuni comme cela depuis 2000), une liste des fonctionnalités à prévoir pour PHP6 a été publiée par Derick :

compte rendu

Je n’ai pas encore eu le temps de tout lire, mais certains points semblent très intéressants… à suivre.



L’url rewriting sans mod_rewrite

    22:25 21 11 2005

Une des fonctionnalités puissantes du serveur web Apache est l’URL rewriting. Cela permet de remplacer des URL complexes du genre

mapage.php?var1=toto&var2=titi

par quelque chose de plus compréhensible pour les moteurs de recherche comme

toto_et_titi.php

L’intérêt principal est d’optimiser son référencement et donc d’avoir des pages mieux placées dans les résultats de recherches. Pour pouvoir utiliser ces fonctionnalités, il faut disposer du module mod_rewrite dans Apache.

Je disais donc, c’est très puissant, mais malheureusement, ce module n’est pas toujours disponible, et si vous n’êtes pas root du serveur, vous n’aurez sûrement pas la possibilité de l’installer.

Plusieurs astuces permettent toutefois d’avoir le même comportement sans pour autant utiliser le mod_rewrite.

Une des solutions consiste à se baser sur la directive FilesMatch d’Apache. Cette directive peut être utilisée localement dans un répertoire grâce à un fichier ‘.htaccess’. Elle permet d’associer un comportement particulier en fonction d’une contrainte définie grâce à une expression régulière. Oulla, par très clair tout ça. Pour simplifier,

« Si l’URL demandée correspond à cette contrainte alors appliquer ce comportement ».

L’idée est de rediriger l’appel vers un script php si un répertoire se trouve dans l’URL. En fait ce répertoire n’existe pas, par contre un fichier portant le même nom existe lui et contient du code PHP à exécuter.

Mmm, toujours pas clair? Bon passons aux travaux pratiques ce sera peut être mieux :

Je créé un fichier ‘.htaccess’ à la racine de mon site. Dedans je mets :

<filesmatch « ^formations$ »>
ForceType application/x-httpd-php
</filesmatch>

Maintenant, je créé un fichier formation (sans extension) et je mets du code PHP dedans. On pourra, par exemple, analyser l’url courante ($_SERVER['REQUEST_URI']) et faire un include en fonction de celle-ci.

Lorsque j’appellerais l’url http://monsite/formations/toto.php, c’est en fait le fichier formations qui sera exécuté en tant que PHP. Voilà, le tour est joué!

Vous n’avez toujours rien compris??? Mais vous êtes nuls! Je rigole bien sûr. Bon, je viens de trouver une page sur developpez.com qui explique la même chose (et bien d’autres choses) mais en mieux :D :

Solution en clair

J’utilise personnellement cette solution sur un serveur où je n’ai pas la main, ça marche très bien et me permet d’avoir de très bons résultats sur Google.



BONGA Power!

    21:13 20 11 2005

Ce week end, mon pote Florian a fêté ses 29 ans. Pour cette occasion, il a invité une dizaine de personnes (dont moi et Sandrine, ma copine) au concert de BONGA, un artiste angolais, qui se déroulait au Bataclan.

Ne connaissant pas cet artiste, je me suis dit que ce serait sympa mais que j’aurais sûrement un peu de mal à suivre et à rentrer dans l’ambiance. Que nenni mes amis, ce fut un de mes meilleurs concerts, un artiste bourré d’énergie, simple et très marrant; une musique pleine de bonne humeur; une ambiance de folie dans laquelle on ne peut qu’entrer et faire la fête! Je le recommande à tous, que du bonheur!

Au passage, deux des copines qui étaient avec nous sont montées sur scène pour souhaiter un bon anniv à mon pote, il savait plus où se mettre ;-)

Sinon, c’était aussi notre première nuit sans Adam qu’on avait confié à mes parents… ça fait bizarre et ça ne m’a pas empêché de me reveiller tout de même à 6h30. Quand on prends des habitudes…



Marre de Free!

    00:40 19 11 2005

C’est pas possible d’avoir une qualité de service aussi minable!
Après avoir suivi les péripéties de mes parents qui, suite à leur dégroupage total de Free se sont retrouvés pendant deux mois sans Internet ni téléphone (en fait jusqu’à leur souscription chez Wanadoo), j’ai tout de même décidé de courir le risque d’y passer à mon tour en septembre.
Le dégroupage se passe super bien, aucune coupure de service, sauf…
Bah oui, il faut bien qu’il y ait un ‘sauf’ ; après quelques vérifications, je me rend compte que mes débits sont passés de 100 Ko/s à moins de 40 Ko/s alors que j’étais sensé passer à quelque chose entre 250 et 400 Ko/s. Au passage, je perd le service télé pour cause de débits pas assez élevés…
que se passe t’il? Une maintenance du réseau? Attendons un peu.

Après quelques jours puis semaines d’attente, rien de nouveau, mes débits en upload sont toujours plus élevés qu’en download. Après un tentative d’appel (sans conviction) à la hotline aboutissant sur un message me disant de rappeler ultérieurement, je décide d’envoyer un mail au service technique en expliquant clairement mon problème. Deux jours après, je reçoit un mail type me disant de vérifier mon installation. Je décide donc de réécrire en leur précisant qu’avant le dégroupage tout allait bien, et donc qu’il ne pouvait s’agir d’un problème venant de chez moi, j’attends de nouveau deux jours et en retour…toujours le même message type sauf que maintenant j’ai consommé mon quota de messages et je ne peut plus leur écrire.

Mais qu’est ce que c’est que ce service clientèle de M….? Je trouve cela absolument intolérable. Quelle société traite ses clients de la sorte!
Je sais qu’il doit s’agir du 3 000 000eme message de ce type sur Free posté sur Internet, mais il fallait que le je fasse, juste pour me libérer.

Pour conclure, je crois que je vais aller chez la concurrence, plus chère, mais plus sérieuse. Juste par principe, je ne peut pas continuer à faire gagner de l’argent à une société aussi minable.



Windows au pays des Timestamps

    00:44 18 11 2005

Beaucoup de personnes pensent, à tort, que tous les développements PHP (ne faisant pas d’appels système) s’executent de façon identique sur Unix ou Windows. Un exemple des légères différences que l’on peut rencontrer est la getion des timestamps Unix.

Un timestamp Unix est une unité de mesure du temps. Il s’agit du nombre de secondes écoulées depuis le 1er Janvier 1970 à 0h00. Ce format à été crée, au début de Unix, afin de palier aux problèmes de mémoire qui, bien avant que l’on ait des pc avec 1 Go de RAM, était très limitée (à l’époque, la mémoire se mesurait en octets). Ainsi, les dates consommaient des espaces mèmoire très réduits en sachant pertinement que plus on avancerait dans le temps et plus l’espace necessaire grandirait mais également que la mémoire disponible sur les machines serait de plus en plus importante.

En partant de ce concept, on en déduit rapidement qu’il n’est pas possible d’exprimer une date antérieure à 1970 avec un timestamp à moins d’utiliser une valeur négative.

Or Unix (ou Linux) sait très bien gérer ces valeurs négatives. un exemple simple :

<?php

echo mktime(0,0,0,1,1,1969);

?>

Ce petit script, qui génère le timestamp du 1er Janvier 1969 à 0h00, sous Unix vous affichera

-31539600

Maintenant testez ce même script sous Windows. Voilà l’affichage que vous aurez :

Warning: mktime() [function.mktime]: Windows does not support negative values for this function in c:\wamp\www\test\timestamp.php on line 3
-1

Windows ne sait pas gérer les valeurs négatives de timestamps! Et ceci peut entrainer de très grosses incohérences sur vos développements.

Conclusion : si vous souhaitez faire des développements multi plateformes, pensez à tester régulièrement votre travail sur toutes les plateformes que vous souhaitez supporter afin d’éviter de mauvaises surprises de dernière minute.



Les short open tags

    09:13 14 11 2005

Une des options disponible dans le ficher de configuration de PHP, bien connu sous le nom de php.ini, est la possibilité d’activer (ou de desactiver) les short open tags :

short_open_tags = On (ou Off)

Les shorts open tags ont au départ été prévus…bah pour pas grand chose, tout simplement ouvrir son code PHP avec la balise <? au lieu d’utiliser la balise <?php. En soi, on pourrait se dire que cela est pratique, mais dans les faits l’utilisation des short open tags pose des problèmes.

En effet, les normes évoluent, le HTML est mort, vive le XHTML! Et avec cette nouvelle norme basée sur du XML, sont apparues de nouvelles balises. Il faudra nottament maintenant utiliser la balise <?xml version= »1.0″ …. pour ouvrir son document. Et c’est là que les short open tags viennent poser problème.
Avec les short open tags activés, un telle balise va être interprétée comme une ouverture de PHP, le code ‘xml version= »1.0″‘ va donc être parsé et générer une « syntax error ». Il ne sera donc pas possible de faire tourner des scripts au format XHTML sur un serveur ayant les short_open_tags activés.

La solution pour un code compatible va consister à utiliser les open tags traditionnels <?php et d’intégrer vos balises d’ouverture de fichier XHTML directement dans votre PHP sous la forme d’un echo :

<?php
echo ‘<?xml version= »1.0″ …..>’;
?>

De cette façon, votre code pourra tourner quelque soit la configuration de votre serveur :-)

J’en profite pour signaler que la dernière version de WAMP5 (1.4.5) est passée en short_open_tags à Off, ce qui a entrainé de nombreux posts sur le forum du site.



Il faut bien commencer quelque part

    23:57 13 11 2005

Je commencerais donc par me présenter. Tout d’abord quelques faits historiques. Je suis né le 17 mai 1977 en région parisienne, à Aubervilliers pour être plus précis. J’ai passé mes cinq premières années à Chelles, ville dortoir de la banlieue est de Paris.
J’ai ensuite suivi mes parents à San Francisco pendant trois ans, mon père travaillait alors pour la société Amdahl et s’était vu offrir un poste dans la Silicon Valley. C’est là qu’à 6 ans, j’ai eu mes premiers contacts avec l’informatique. Mon père qui avait un ordinateur Texas Instrument m’avait acheté un logiciel pour apprendre mes tables de multiplication sous la forme d’un jeu. J’avoue qu’à l’époque, je préférais passer mon temps sur le Vectrex à jouer à Minestorm.
Je suis ensuite revenu à Chelles où j’ai passé toute mon enfance jusqu’au bac S que j’ai passé avec une option informatique. Les cours consistaient alors à taper des commandes dos, le niveau du prof ne permettant pas de toute façon d’aller plus loin.
Mon premier diplôme en poche, je suis parti à Amiens pour faire mes études dans l’école d’ingénieur ESIEE. Une année de perdue à tourner en rond dans une ville dont la simple évocation me donne encore des frissons dans le dos. Cette année m’a tout de même permis de découvrir la programmation au travers du langage Pascal.
Alors pris par la fière de l’octet et de retour à Paris, je me suis inscrit dans un DUT « Services et Réseaux de Communication » à Marne la vallée; deux années plutôt tranquilles où j’ai pu passer mes premières heures sur Internet grâce au réseau de l’université et créer mes premiers sites, à l’époque en HTML avec des gifs animés collés un peu partout, façon arbre de noël.
J’ai ensuite continué dans l’école d’ingénieur informatique EPITA. Trois années de cursus pendant lesquelles j’ai pu m’impliquer dans le BDE de l’école et suivre la spécialisation MMA très orientée technologies web.
Le cursus se terminait alors (et c’est toujours le cas d’ailleurs) par un stage de 6 mois en entreprise. Au lieu de chercher un CDI comme les 99% de ma promo, j’ai décidé d’utiliser ce temps pour monter ma première structure : KAPTIVE, société de services spécialisée dans les logiciels libres. Ces six mois m’ont permis de monter le capital de la société avec des missions de développement au travers de la junior entreprise de l’école « Crystal » et de créer la structure. Mon pote de promo Cyril PIERRE de GEYER m’a alors rejoint et nous avons finalement lancé l’activité de KAPTIVE ensemble.
Un an plus tard, nous lancions notre deuxième société, ANASKA, organisme de formation également spécialisé dans les logiciels libres.
Depuis, quatre ans ont passé et les deux sociétés ont grandi, nos catalogues se sont étoffés, les projets se sont enchaînés et nous occupons maintenant une certaine place au sein de la communauté.
Vous êtes toujours là ?
Très bien, passons maintenant à mes activités actuelles.
Au niveau professionnel, vous savez tout, ça bouge énormément en ce moment pour nous, c’est très gratifiant mais également très fatiguant. En ce qui concerne la communauté, je suis membre actif de l’AFUP mais ma principale contribution se situe au niveau de WAMP5, application permettant d’installer une environnement de développement AMP sous Windows (comme EasyPHP) que j’ai crée en 2003 et que je maintiens seul depuis. Le projet marche bien, j’ai actuellement près de 2000 téléchargements par jour et le site atteint les 500 000 pages affichées par mois.
Côté, vie personnelle, je suis l’heureux papa d’Adam, né le 10 avril 2005 après neuf longs mois d’attente.
Voilà, maintenant que vous savez tout de moi, c’est promis, le prochain post sera moins long.