10 juillet 2011

PHP Universal Fetchor

Après avoir présenté des classes PHP comme PQO, CMD et PSO, voici un billet qui tente de les mettre en perspective à l'aide d'une question. Quel est le point commun entre :

  • exécuter une requête SQL
  • exécuter une commande système
  • découper une chaîne de caractères en petits bouts
  • lire le contenu d'un fichier ?

Avez-vous trouvé ? Et bien, si toutes ces opérations sont différentes, l'obtention du résultat de chaque traitement peut être obtenu suivant une interface unique :

interface Fetchor
{
    public function map($f);
    public function fetch();
    public function fetchAll();
    public function close();
}

Démonstration


$s = PSO::factory('Hello,How,Are,You,Today')->setEnding(',');
$s->map(function($e) {
   echo $e, PHP_EOL;
});

$s = PQO::factory('SELECT title, description FROM posts')->fire();
$s->map(function($e) {
   echo $e->title, PHP_EOL;
});

$s = CMD::factory('/bin/ls')->param('/tmp')->fire();
$s->map(function($e) {
   echo $e, PHP_EOL;
});

$s = PIO::factory('/etc/passwd');
$s->map(function($e) {
   echo $e, PHP_EOL;
});

Maintenant, si votre PHP ne supporte pas les fonctions anonymes, aucun problème :


while($e = $s->fetch()) {
   echo $e, PHP_EOL;
});

Rien de neuf

Bien sur uniformiser le parcours d'un jeu de résultat n'est pas une idée neuve. PHP propose notamment StreamWrapper qui propose comme méthode pivot la lecture de fichier façon C : fopen, fread, fclose. A chacun son style ...

Téléchargement et code source

Le code source est disponible sur GitHub : http://github.com/touv/plor

ou on peut directement l'installer avec PEAR en s'abonnant au Channel Respear :


% pear channel-discover pear.respear.net
% pear install respear/plor

08 juillet 2011

Je RESPEAR en PHP

PEAR permet de regrouper dans un même paquet du code PHP.
PIRUM permet de mettre facilement à disposition des paquets PEAR.
Mais, comment passer de l'un à l'autre rapidement et automatiquement ?
Avec RESPEAR bien sur !

Interface REST

RESPEAR est une interface REST à Pirum. On va pouvoir ajouter (ou supprimer) des paquets PEAR à un serveur PIRUM à distance, simplement à l'aide d'une requête HTTP, exemple :


cat ExAppli-1.0.1.tgz | curl \
      -u respear:354f123b-7a75-f654-9153-0e15dc2f5b52 \
      -X POST --data-binary @- \
      http://demo.respear.net/respear/

Construction automatique

RESPEAR va encore plus loin, il peut même construire pour vous un paquet PEAR uniquement à partir d'un fichier package.xml contenu dans votre gestionnaire de source, exemple :


curl -u respear:354f123b-7a75-f654-9153-0e15dc2f5b52 \
     -X POST \
     -H "X-URL: https://github.com/touv/plor/raw/master/package.xml" \
     http://demo.respear.net/respear/

Suivre les versions

Accessoirement, RESPEAR propose un flux ATOM pour chaque paquet ajouté. On peut ainsi suivre l'arrivée de nouvelles versions, exemple : http://pear.respear.net/respear/plor/.

Migration

Du coup, j'ai automatisé la création de package pour l'ensemble des paquets PEAR de ma petite collection et en une seule commande :

  • je tague mon code source,
  • je construis un paquet PEAR
  • et je le mets à disposition sur un channel.

Cool ! Je respire ...

Téléchargement et code source

Le code source est disponible sur GitHub : http://github.com/kerphi/ResPear

Et pour l'installer, le mieux est de suivre la procédure.