Pour installer le serveur PEAR, c'est simple:
pear channel-discover pear.chiaraquartet.net pear install chiara/Chiara_PEAR_Server pear run-scripts Chiara_PEAR_Server
Ensuite on répond aux question, et c'est automagique.
Après, pour créer des packages, ça se corse. Tout d'abord, on a besoin de PEAR_PackageFileManager:
pear install PEAR_PackageFileManager
Ensuite, le but est de générer les package.xml qui vont bien. Voilà comment j'ai procédé pour le package Zend:
mkdir -p ~/pear/zend/src && cd ~/pear/zend wget http://framework.zend.com/download/tgz -O - | tar xzC ~ mv ~/ZendFramework-0.8.0/library/Zend* src/ php ./mkpkg.php make cd src && pear package
Ceux qui ont bien suivi auront noté que mkpkg.php est sorti un peu de l'espace :-) Vous trouverez son contenu à la fin du billet.
Pour résumer, on créé un répertoire de travail (~/pear/zend/), dans lequel on créé un répertoire src, qui contiendra tous les fichiers du package, puis le script mkpkg.php se charge 1) d'analyser le contenu de src, et 2) de créer le package.xml qui va bien, selon les instructions qui lui sont fournies.
Nous disposons désormais d'un package Zend-0.8.0.tgz dans ~/pear/zend/src, que nous n'avons plus qu'a uploader via l'interface d'administration du serveur PEAR précédemment installé :-)
Le fichier mkpkg.php:
<?php
require_once('PEAR/PackageFileManager2.php');
PEAR::setErrorHandling(PEAR_ERROR_DIE);
$packagexml = new PEAR_PackageFileManager2;
$e = $packagexml->setOptions(array(
'baseinstalldir' => '/',
'packagedirectory' => dirname(__FILE__).'/src',
));
$packagexml->setPackage('Zend');
$packagexml->setSummary('Zend Framework');
$packagexml->setDescription('The Zend\'s PHP Framework');
$packagexml->setChannel('pear.phpmafia.net');
$packagexml->setAPIVersion('0.8.0');
$packagexml->setReleaseVersion('0.8.0');
$packagexml->setReleaseStability('devel');
$packagexml->setAPIStability('devel');
$packagexml->setNotes("Still a preview release");
$packagexml->setPackageType('php'); // this is a PEAR-style php script package
$packagexml->addRelease(); // set up a release section
$packagexml->setPhpDep('5.1.2');
$packagexml->setPearinstallerDep('1.4.0a12');
$packagexml->addMaintainer('lead', 'ash', 'Geoffrey Bachelet', 'geoffrey+pear@zubrowka.org');
$packagexml->setLicense('New BSD License', 'http://framework.zend.com/license/new-bsd');
$packagexml->generateContents(); // create the <contents> tag
$pkg = &$packagexml->exportCompatiblePackageFile1(); // get a PEAR_PackageFile object
if (isset($_GET['make']) || (isset($_SERVER['argv']) && @$_SERVER['argv'][1] == 'make')) {
$pkg->writePackageFile();
$packagexml->writePackageFile();
} else {
$pkg->debugPackageFile();
$packagexml->debugPackageFile();
}
?>
La nouvelle version du site internet Splitgames, dont j'ai activement participé au développement et à la mise en place de la plateforme technique dans le cadre d'une mission Clever Age, est en ligne (avec un peu de retard, mais quand on aime, on ne compte pas.)
Splitgames est une plateforme d'échange en ligne de jeux vidéos. Cette nouvelle version, entièrement refactorée par rapport à la précédente, repose sur la version 1.0 du framework Symfony, dont je vous parle régulièrement ici même. Preuve s'il en est que de sympathiques choses peuvent être accomplies avec cet outil.
Félicitations à tout ceux qui ont travaillé sur le projet !
PS: Les popups javascript en rollover, c'est pas moi 
Via Planet PHP et le blog de Ivo Jansch , j'ai découvert un truc marrant en PHP, on peut écrire des choses du type :
<?php System.out.print("Je fais du Java en PHP ;-)"); I.need.to.get.some.sleep(1); ?>
Bon évidemment ça n'est pas recommandé et en plus ça n'a aucun intérêt :-) En fait techniquement ce comportement est normal. Le parser fait juste quelques notices car il interprète les instructions inconnues comme des constantes non définies...
J'ai un warning pénible lors du lancement d'un script PHP4 en ligne de commande (CLI) sur ma Ubuntu Edgy Eft installée sur ma Dedibox . Rien de bien grave, mais à chaque lancement d'un script (au hasard un de ceux d'eZ Publish :-), j'ai le message suivant :
$ php4 update/common/scripts/cleanup.php -s plain_site_admin expired_session PHP Warning: mime_magic: type regex BEGIN[[:space:]]*[{] application/x-awk invalid in Unknown on line 0
Un moyen de supprimer ce message systématique trouvé sur Launchpad et sur l'outil de rapport de bug de Debian est d'aller commenter la ligne 273 du fichier /usr/share/file/magic.mime . Simple, un peu crade mais au moins ça marche et puis je ne pense pas que cette modification ait beaucoup d'impact sur le reste du système...
Comme je l'indiquais dernièrement , j'ai décidé de placer mes photos et mes billets sous Licence Creative Commons CC-By-Sa ce qui implique de citer mon nom (ou je me contente de l'adresse d'origine du site) lors de l'utilisation de ces contenus. Mais je me rend compte en regardant mes statistiques générées avec AWStats que beaucoup de gens hotlink mes photos sur divers blogs , page myspace ou divers forums sans rien mentionner de leur provenance et ça m'énerve un peu... Alors bien sûr, je peux m'inscrire et rajouter les mentions nécessaires dans le topic du forum en question mais :
J'ai donc décider d'automatiser un peu le processus en utilisant quelques règles de Rewriting Apache et un simple script PHP qui ajoute un texte à la volée et met en cache les images hébergées sur ma Dedibox mais utilisées hors de pwet.fr . Je n'aime pas trop le procédé, mais je n'en vois pas d'autre...
Techniquement parlant, j'ai mis la configuration suivante dans mon fichier de configuration d'Apache :
RewriteCond %{HTTP_REFERER} !^$ [NC] RewriteCond %{HTTP_REFERER} !^http://.*pwet\.fr.*$ [NC] RewriteCond %{HTTP_REFERER} !^http://images\.google\..*$ [NC] RewriteRule .*\.jpg$ /hotlink.php?img=%{SCRIPT_FILENAME}&ref=%{HTTP_REFERER}
Ce qui signifie que lors de l'appel à une image si une URL référente est définie et n'est ni pwet.fr, ni Google Images alors l'image renvoyée est en fait traitée par un script.
Le script hotlink.php est un traitement qui ajoute un texte blanc en bas de l'image en fonction de la taille de l'image en utilisant les fonctions de traitements d'image de la bibliothèque GD .
La version 0.9 du ZF est disponible sur le channel PEAR phpmafia:
pear upgrade phpmafia/Zend-0.9.0
ATTENTION, cette version change pas mal de choses au niveau de la classe Zend: vos applis risquent de ne plus fonctionner suite à la mise à jour.
Voir aussi: L'annonce sur la mailing list Zend Announce
Le Service Locator, est un pattern permettant la sauvegarde et la restitution d’objets, pour cela, il utilise un tableau par lequel il garde en memoire les objets. Dans une application utilisant le motif MVC, l’utilisation de registre apparait comme une bonne methode sachant que l’application est centrée sur un seul fichier, “index.php”.
Avant d’expliquer comment le mettre en oeuvre, on va d’abord le mettre en situation dans un cas concret.
Notre application est concue sur un modele MVC et tourne autour du fichier index.php.
On peut s’apercevoir que dans le fichier index.php on crée l’instance de notre modele I18n. Ensuite par l’intermediaire de ServiceLocator, on le place en registre.
Maintenant on récupere notre objet afin de l’utiliser dans notre controlleur IndexAction.php. On remarque que notre application dispose d’une seule occurence I18n pouvant etre utilisée dans tout les controlleurs.
Rien de compliqué dans cette classe, on se sert simplement de methodes et attributs statiques, le tout est de bien faire attention eviter les doublons, et retourner les bons messages d’erreur en cas d’une mauvaise utilisation de celui-ci.
L’utilisation de ce pattern est interessant car il permet d’eviter tout code superflu, et optimise un maximun l’application, dans le sens où on l’utilise la maniere d’un Singleton une seule instance de nos modeles, et cette instance est disponible partout dans notre application.
Le ZF est sorti en version 0.9.1 et est dispo sur le channel pear.
Voir aussi:
Aujourd'hui, je suis tombé sur Blogs & Pages perso référencement par département via le forum Webrankinfo , un annuaire du réseau 1Annuaire . On remarquera la page d'accueil qui clignote un peu partout (mais j'ai déjà vu bien bien pire), mais le plus marrant, c'est le formulaire d'inscription qui regroupe les champs habituels ainsi qu'un code de vérification à recopier, jusque là rien d'anormal, mais ce code est directement dans la page HTML, point de captcha illisible anti-ocr bariolé, trituré, barbouillé inefficace avec ça !
Je suis sûr que c'est hyper efficace contre les robots spammeurs :-)
Par curiosité, je suis aller voir le site 1Annuaire, j'ai beaucoup apprécié les liens vers les 870 pages de résultats en haut et en bas de page sur la recherche blog , très pratique pour se rendre à la page 652 . Amusant aussi de constater qu'on peut passer les variables indifféremment en POST ou en GET, ça laisse augurer des possibilités intéressantes aux script kiddies de passage.