Le PHP Tour est un nouveau cycle de conférences proposé par l’AFUP. Il est itinérant et cette année, c’est Lille qui a été choisi. Voici une vidéo de présentation du PHP Tour ainsi que quelques interviews de responsables dont les réponses ont été mises côte à côte, sur le site de PHP TV :
Archives de la catégorie ‘PHP’
PHP Tour de Lille en vidéo sur PHP TV – 7. décembre, 2011
Plugin Auth/ACL : les sources – 10. janvier, 2011
Merci à tous ceux qui ont suivi le webinar Zend. Petit rappel des étapes de cette présentation (je mettrai le lien vers l’enregistrement quand il sera disponible) :
- Outils installés : Zend Studio, Zend Server, Zend Framework.
- On part d’une page blanche, dans un répertoire /var/www/example.
- Création d’une structure applicative minimale avec Zend_Tool.
- Développement du contrôleur d’authentification.
- Création des règles ACL et développement de l’objet Zend_Acl.
- Création du plugin qui vérifie authentification et droits d’accès.
- Création de la base, du formulaire et du modèle « user » pour l’authentification.
- Ajout de la redirection après authentification (hors démo).
Tout ça réalisé en 45 minutes, le rythme s’en ressent, aussi je vous propose de télécharger les sources commentées. La base sqlite est déportée dans les sources et la page d’accueil complété avec liens et infos.
Le premier fichier sont les sources produites lors de la démonstration. Le deuxième fichier comporte l’ajout d’un mécanisme de redirection après authentification.
- Sources commentées de l’application exemple (tgz, 7,1ko)
- Sources complétées de l’application exemple (tgz, 7,7ko)
Pour rappel, les commandes qui permettent de créer l’application :
zf create project . example example
zf create controller Auth
zf create controller User
zf create action login Auth
zf create action logout Auth
zf create action list User
Et celles qui permettent de créer l’adaptateur de la base de données et un squelette de modèle et de formulaire :
zf configure db-adapter ‘adapter=pdo_sqlite&dbname=/tmp/mabase.db’
zf create model User
zf create form Login
Webinar : plugin d’authentification et de droits d’accès développé en un temps record ! – 9. janvier, 2011
En moins d’une heure, le webinar de ce jour (lundi 10 janvier) proposé par Zend Technologies et présenté par votre serviteur, vous montrera comment créer un plugin qui contrôle l’authentification et les droits d’accès de manière cohérente et facile. Et nous partirons pour cela d’une page blanche !
La présentation aura lieu en live de 14h30 à 15h30, une petite heure qui ne sera certainement pas perdue si ce sujet vous intéresse !
Si pendant la présentation vous avez zappé quelques détails, ce qui sera probablement le cas au vue du rythme imposé
je reste à votre disposition sur ce blog pour vous fournir toutes les informations dont vous avez besoin.
Alors à vos claviers, ce lundi 10 janvier à 14h30 précises !
Zend Framework 1.10 : un outil complet – 6. septembre, 2010
Il aura fallu attendre la version 1.10.x de Zend Framework pour disposer d’un outil « complet », notamment avec un composant Zend_Application plus mûr, une gestion plus fiable de l’auto-chargement et un Zend_Db utile permettant la mise en place de modèles de données sans ambiguïté. La documentation est intéressante et plutôt claire, bien que la traduction française pas toujours au fait de la dernière version en date et que l’utilisation avancée des composants nécessite toujours de se plonger dans le code.
Ceux qui ont commencé avec une version inférieure à 1.8 auront pour la plupart du mal à intégrer Zend_Application. Mais l’utilisation de ce dernier n’est pas nécessaire lorsque la base applicative est bonne. Je travaille encore sur des applications qui ont commencé avec Zend Framework 1.2 et qui aujourd’hui profitent sans problème des avancées de la 1.10. C’est en revanche côté migration de PHP 5.2 vers PHP 5.3 qu’il peut y avoir des problèmes : maintenir un PHP 5.2.x récent est conseillé tant que Zend Framework 1.x reste d’actualité.
Pour ceux qui débutent avec Zend Framework, l’application quick start est un bon moyen de commencer, suivi par le guide de référence. Zend_Tool est également un composant intéressant qui évolue et permet la mise en place rapide d’architectures applicatives.
Pour les utilisateurs avancés, créer et étendre des composants avec Zend Framework est aussi simple que confortable, ne serait-ce que pour agréger sa bibliothèque de validateurs, filtres, plugins et helpers, bien utiles d’une application à l’autre. L’implémentation MVC et son environnement sont également bien pensés : routage, boucle d’exécution, système d’intégration sous forme de plugins (cf. illustrations).
La connaissance approfondie des principaux composants de Zend Framework apporte incontestablement gain de temps et cohérence… pas plus tard que la semaine dernière, les 540 lignes de code d’un modèle de données n’en on fait plus que 4 (!), connaissance approximative de Zend_Db_Table oblige.
Côté performance, rien de révolutionnaire. Un accélérateur de type APC sera nécessaire et un bon système de fichiers aussi. Ces deux conditions étant remplies, les performances applicatives seront dans la plupart des cas tout à fait honorables, on aura du mal à croire qu’une bonne centaine d’inclusions en moyennes sont opérées à chaque requête HTTP.
Possibilités et limites de Zend_Mail – 11. décembre, 2009
Zend_Mail est un composant Zend Framework, qui facilite la création et l’envoi d’e-mails. Il permet également de consulter une boite mail distante et de manipuler des messages.
Aujourd’hui, les fonctionnalités de création d’e-mails sont au point et vraiment pratiques. En revanche, il serait intéressant de partir d’un fichier e-mail plat, qui servirait de modèle, ce que Zend_Mail fait difficilement. A travers Zend_Mail_Message, il est possible de parcourir un e-mail mais sauf erreur il n’existe pas encore de passerelle fiable vers Zend_Mime_Message. Or Zend_Mail utilise Zend_Mime_Message pour la gestion des mails multipart.
Cette semaine, j’ai tenté d’utiliser Zend_Mail pour mettre en place un moteur de mailing spécifique lié au système d’information d’une entreprise. Au final, j’utilise Zend_Mail_Message pour la lecture des données à la sortie de postfix puis je manipule mon e-mail « à la main ».
Exemple d’utilisation de Zend_Mail_Message :
// Lecture d'un mail
$params = array('raw' => $mailContent);
$mailPart = new Zend_Mail_Message($params);
// Accès aux headers
$subject = $mailPart->getHeaderField('subject');
$headersTab = $mailPart->getHeaders();
// Parcours des parts
foreach ($mailPart as $part) {
$headers = $part->getHeaders();
$body = $part->getContent();
}
OpenStates passe à Linux-Vserver – 24. novembre, 2009
Après avoir utilisé kvm pendant des années (avec beaucoup de satisfaction je dois le reconnaître), OpenStates passe à Linux-Vserver, un « isolateur des contextes de sécurité combiné à du routage segmenté« , bref, une alternative à la virtualisation. OpenStates utilise désormais ce système pour ses formations.
Le principe : il s’agit d’un patch du noyau Linux qui permet la création de contextes isolés les uns des autres. Ainsi, il est possible d’installer plusieurs distributions linux basées sur le même noyau.
Pourquoi tout abandonner pour Vserver ?
Voici quelques arguments qui ont décidé OpenStates à adopter Linux-Vserver :
- La machine virtuelle est toute petite : une distribution minimale sans son noyau, donc moins de redondances par rapport à une virtualisation classique.
- La maintenance est facilitée par le fait que le système hôte a accès directement aux fichiers des machines virtuelles… en fait, une VM, c’est un répertoire. On peut donc copier ou modifier des fichiers depuis le système hôte (que les machines soient éteintes ou en marche) et les backups peuvent être réalisés par synchronisation incrémentale (rsync ou équivalent) !
- La configuration de chaque VM sur le système hôte est très complète, que ce soit pour la mise en place du réseau, les fichiers de configuration, la construction ou le clonage des machines virtuelles.
- Enfin, dernier argument et non le moindre, les performances sont aussi excellentes que la gestion des ressources ! Les VMs se partagent la RAM et les process intelligemment, la vitesse d’exécution d’une VM est la même que celle du système Hôte.
Notons aussi que le créateur de Linux-Vserver, Herbert Pötzl, est sympa et ouvert en plus d’être talentueux. Il accueille les débutants avec beaucoup de patience, merci à lui.
Qui doit écarter la solution Vserver ?
Malheureusement, vous ne pourrez pas installer de système Microsoft, avis aux amateurs de fenêtres multi-colores… car il faudrait que Windows se base sur un noyau 2.6.xxx…
De plus, de bonnes connaissances en administration Linux sont généralement requises pour maîtriser Linux-Vserver, contrairement à VMWare, KVM ou VirtualBox.
PHP TV #4 – MySQL, Magento, Zend Framework & Symfony – 20. mai, 2009
Une nouvelle édition de PHPTV est sortie ce week-end. Après quelques mois l’absence faute de temps, l’équipe s’est remise à tourner sur le sujet des frameworks Symfony et Zend, de MySQL et Magento.
|
|
Comme pour le magazine #2, il est possible d’écouter des extraits du magazine qui en tout dure environ 10 minutes. A l’avenir, le site de PHPTV sera découpé en rubriques. Les magazines resteront en page d’accueil, tandis que les rubriques seront fournies en sujets plus courts tels que les interviews et reportages occasionnels réalisés par nos correspondants PHPTV.
Enfin, je profite de ce post pour remercier tous ceux qui nous soutiennent dans ce projet en participant à la diffusion des vidéos, vous êtes de plus en plus nombreux, ainsi que les membres de l’équipe toujours présents et motivés : Eric, Xavier, Christophe et Julien. Sur ce magazine #4, nous avons également accueilli Olivier Dasini pour les questions MySQL, qui a accepté de venir malgré notre appel tardif.
PHP en 2009 – 11. mars, 2009
PHP continue à évoluer en 2009. L’arrivée imminente de PHP 5.3.0 et de ses nouveautés, l’apparition de versions spécialement étudiées à Microsoft Windows et l’adaptation aux nouvelles technologies du Web 2.0 sont trois orientations importantes de PHP, qui sont des arguments de poids pour l’adoption de la technologie dans les entreprises.
Si de gros efforts sont déployés pour que PHP reste à la pointe, le chemin n’est pas terminé, car PHP n’est toujours pas une solution d’avant plan pour des projets stratégiques qui touchent au coeur des entreprises. Malgré l’apparition de frameworks sérieux, l’image de PHP dans le monde professionnel en général n’est pas toujours à la hauteur des efforts fournis.
Un autre point ambigu concerne les méthodes d’adoption de PHP pour de gros projets. Plus que jamais, un projet PHP doit être réalisé avec organisation et rigueur. Une bonne connaissance du langage et de ses composants toujours plus nombreux, une architecture organisée et cohérente, une bonne culture générale en informatique et en génie logiciels sont des pré-requis nécessaires.
Aujourd’hui, on peut affirmer que les succès de PHP concernent presque exclusivement des projets liés au web. Les entreprises qui parviennent à s’enrichir en utilisant PHP proposent des gros portails, des intranets ou des solutions de gestion avec interface web. L’interface est importante car elle est le premier élément que l’on voit et souvent le premier argument de vente. PHP, en proposant une intégration parfaite à Flex et autres solutions Ajax, est une solution idéale pour le développement d’interfaces dynamiques.
Le revers de la médaille concerne les systèmes d’information. Des solutions compilées en C# ou en Java sont toujours préférées à PHP pour tout ce qui concerne les manipulations de données métier. Ces technologies, bien qu’interfaçables, ne sont dans la pratique que très rarement mélangées avec PHP. PHP 5.3 offre de nouvelles possibilités objet tel que les espaces de noms, des corrections importantes et une SPL qui évolue. Mais le développement, intuitif et agile, de projets web tels qu’on les connaît ne s’avère pas adapté au développement d’un système d’information complet, plus théorique et plus prédictif.
La nouvelle marche à franchir pour PHP concerne donc l’adoption totale de la POO avec PHP, aidée de frameworks solides, de la SPL, d’outils de maintenance tels que PHAR, et surtout d’une évolution des méthodes de développement copiée sur les grands projets J2EE et .NET.
Standard PHP Library : ArrayAccess – 17. février, 2009
La « librairie standard de PHP » ou SPL sont un ensemble de classes et d’interfaces qui permettent d’optimiser les performances et les pratiques de programmation en PHP. Cet outil, qui est installé par défaut dans PHP, mérite fortement d’être connu et permet des acrobaties très intéressantes, comme nous allons le voir.
Ce tout premier tutoriel aborde une classe courante de la SPL : ArrayAccess. Nous allons nous amuser à mettre en place un lien fort entre un flux XML et un tableau. Ce système permet d’écrire et de lire dans un fichier XML de manière très simple, à travers un tableau !
Lier un flux XML à un tableau
ArrayAccess est une interface qui permet de donner à une classe des propriétés que seuls les tableaux avaient jusqu’à présent. Le principe : on peut contrôler les actions qui sont faites sur une variable qui s’apparente à un tableau, en particulier ajouter, modifier et retirer des éléments.
En d’autres termes, nous souhaitons lire et écrire dans ce flux xml…
Best practices PHP
Zend Framework
Memento PHP
…à travers un tableau, comme ceci :
// Affichage d'un produit
echo $products['bpp'] . "\n";
// Ajout d'un produit
$products['xml'] = "Le XML facile";
echo $products['xml'] . "\n";
// Suppression d'un produit
unset($products['pa']);
echo $products['pa'] . "\n";
La classe ProductList
Commençons par écrire notre classe qui contient le mécanisme de liaison entre le flux et le tableau simulé :
class ProductList implements ArrayAccess
{
private $products = null;
public function __construct($feed)
{
$this->products = simplexml_load_string($feed);
}
public function offsetExists($offset)
{
$xpath = '/products/product[@id=\'' . $offset . '\']';
$values = $this->products->xpath($xpath);
return (boolean) count($values);
}
public function offsetGet($offset)
{
$xpath = '/products/product[@id=\'' . $offset . '\']';
$values = $this->products->xpath($xpath);
if (count($values)) {
return (string) $values[0];
}
return null;
}
public function offsetSet($offset, $value)
{
$product = $this->products->addChild('product', $value);
$product['id'] = $offset;
}
public function offsetUnset($offset)
{
$cpt = -1;
$toDel = array();
foreach ($this->products->product as $product) {
$cpt++;
if ($product['id'] == $offset) {
$toDel[] = $cpt;
}
}
foreach ($toDel as $id) {
unset($this->products->product[$id]);
}
}
public function getXml()
{
return $this->products->asXML();
}
}
Cette classe, qui implémente l’interface ArrayAccess, charge un flux XML via son constructeur __construct(). Ce flux peut être récupéré grâce à la méthode getXml(). Les quatres méthodes intéressantes, qui sont imposées par l’interface ArrayAccess sont les suivantes :
- offsetExists est automatiquement appelé lorsque PHP souhaite savoir si un élément $offset du tableau existe. Pour simuler cela, nous faisons une requête xpath sur le flux XML.
- offsetGet récupère l’élément du tableau dont la clé est $offset.
- offsetSet ajoute un élément au tableau. Faire cela avec simplexml est un jeu d’enfant.
- offsetUnset retire un élément du tableau. L’algorithme proposé ici retire les éventuels doublons.
Ainsi, la création d’un nouveau objet ProductList peut s’utiliser comme un tableau, comme le monde la section suivante.
Utilisation de l’objet ArrayAccess
Voici un petit exemple d’utilisation de cet objet. Comme nous pouvons le voir, son maniement s’apparente à celui d’un tableau et pourtant, c’est un fichier XML qui est manipulé par dessous :
$feed = "
Best practices PHP
Zend Framework
Memento PHP
";
// Création d'un tableau attaché au flux XML
$products = new ProductList($feed);
// Affichage d'un produit
echo $products['bpp'] . "\n";
// Ajout d'un produit
$products['xml'] = "Le XML facile";
echo $products['xml'] . "\n";
// Suppression d'un produit
unset($products['mp']);
echo $products['mp'] . "\n";
// Extraction du flux XML modifié
echo $products->getXml();
Le flux généré par ce petit exemple est le suivant :
Best practices PHP
Zend Framework
Le XML facile
Ce petit tutoriel s’arrête ici. Nous irons un peu plus loin dans le prochain avec d’autres interfaces telles qu’Iterator et Countable.