3 | CUTEFLOW | POO
ZEND FRAMEWORK
TOUTE LA PUISSANCE DE PHP !
FLASH ET PHP
COMMUNICATION FLEX 4 ET PHP 5.3
PROGRAMMATION ORIENTÉE OBJET
UN STYLE DE PROGRAMMATION PUISSANT ET COMPLEXE
VIRTUALISATION SOUS LINUX
TECHNOLOGIES ET SOLUTIONS
OUTILS
1 5/2009
Projets
HOSTING
NEXT LEVEL
Tous les tarifs s‘entendent HT et sont soumis aux conditions de vente de Hetzner Online AG.
Les prix sont susceptibles d‘être changés. Tous droits réservés par les fabricants respectifs.
2 Intel, le logo Intel, Intel Core et Core Inside sont des marques déposées par Intel Corporation aux U.S.A. et dans d‘autres pays. 6/2010
5/2010
Table des matières
www.phpsolmag.org 3
6/2010
VARIA
Tél. 0975180358, Fax. +48 22 244 24 59
www.phpsolmag.org
Bêta-testeurs :
Fabrice Gyre, Brice Favre, Valérie Viel, Cyril David,
PROJETS
Aymeric Lagier, Christophe Milhau, Alain Ribault, 14 Communication Flex 4 et PHP 5.3
Stéphane Guedon, Eric Boulet, Mickael Puyfages, Romain Pouclet
Christian Hernoux, Isabelle Lupi, Antoine Beluze,
Timotée Neullas, Yann Faure, Adrien Mogenet, Toute tentative de lancer un débat stérile mise à part,
Jean-François Montgaillard, Turmeau Nicolas, si HTML5 est actuellement sous les feux de la rampe,
Jonathan Marois, Wilfried Ceron, Wajih Letaief,
François Van de Weerdt, Jeremy Rafflin, Eric Vincent.
Flash reste bien présent sur le web. Il existe beaucoup
d’options pour communiquer avec la couche métier
Les personnes intéressées par la coopération d’une application, le protocole AMF en fait partie. Vous
sont priées de nous contacter : verrez comment mettre en place une communication
editor@phpsolmag.org
entre Flash et PHP via le protocole AMF, en utilisant le
composant AMF du Zend Framework.
Publicité :
publicite@software.com.pl
4 6/2010
Table des matières
LINUX
26 La virtualisation sous
Linux, technologies
et solutions
Jean-François Albertini
Au travers de cet article, nous al-
lons vous présenter succinctement les dif-
férentes technologies de virtualisation dis-
ponibles sous Linux. Pour ce faire, nous
procéderons à une brève présentation de
la virtualisation et de ses concepts, ain-
si que les enjeux autour de ce phénomène.
Ensuite, nous aborderons les différentes technologies
afin d’en exposer les différents aspects, et fournirons
un exemple de solution associée à chacune des tech-
nologies. POUR LES DÉBUTANTS
44 Manipuler les sessions avec PHP
PRATIQUE
Cécile Odero, Magali Contensin
La gestion des niveaux de privilèges d’un internaute
32 Introduction à la POO avec PHP dans un wiki ou un CMS et la réalisation d’un panier
Martin Richard de commande, sont deux exemples d’applications
La programmation orien- rendues possibles par le mécanisme des sessions.
tée objet permet de fixer Dans cet article vous apprendrez à créer et manipu-
des méthodes facilitant la ler des sessions depuis un script PHP.
conception et le dévelop-
pement de programmes.
Découvrez comment dé-
velopper vos applica-
tions PHP en utilisant la
programmation orientée
objet, qui vous permettra
de concevoir des produc-
tions plus fiables, plus
puissantes et plus faciles
à maintenir !
Actualités
Wordpress 3
La nouvelle version de Wordpress vient
XMP PHP Toolkit extension 2.0
XMP PHP Toolkit est une nouvelle barre qui vous sera utile. Cette barre est
de sortir. Celle-ci est une version ma-
jeure car elle propose de nombreuses inspirée de Adobe XMP Toolkit et réalisée par Mathias Vitalis, sous licence
nouveautés et de nouvelles fonction- GPL v3. Grâce à elle, vous allez :
nalités. Par ailleurs, vous allez pouvoir • Lire.
personnaliser le nom du compte ad- • Ecrire.
ministrateur comme vous le souha-
itez, au lieu du classique admin. Vous • Modifier.
pourrez aussi créer plusieurs blogs en • Parser.
même temps avec la même interface. • Parcourir les métadonnées d'un fichier multimédia.
Enfin, les thèmes et les plug-ins sont
centralisés pour simplifier les installa-
tions et les configurations. C' est une extension de PHP 5 et vous pouvez utiliser les classes XMP
http://fr.wordpress.org/ d'Adobe et les différentes méthodes proposées : lectures, modifications,
extraction des métadonnées des fichiers multimédia comme :
Tests Unitaires
Les tests unitaires sont souvent un po- • les images (tiff, jpeg, eps, pdf, psd),
int mal traité (ou pas du tout) lors d’un • l'audio (mp3, wav),
développement. Une liste de 10 points • la vidéo (avi, mpeg et mov).
a été réalisée par Anna Filina montrant
qu’il est important de le faire. Ainsi, vo-
tre code sera assuré du bon fonction- Grâce à cette barre, les manipulations des ces fichiers devienent plus faciles et par
nement de votre projet. conséquent rapides. Cette nouvelle version qui vous est proposée, est compati-
http://annafilina.com/blog/10-reasons- ble avec PHP 5.3 et tourne avec de nouveaux OS. Ainsi, vous pourrez faire fonc-
to-write-unit-tests/
tionner cette barre sous Linux, Débian 32/64 bits, FreeBSD et Mac OS X.
Atutor http://xmpphptoolkit.sourceforge.net/
Atutor est une application écrite en
PHP et MySQL. Il s’agit d’un LCMS/
LMS (Learning Content Management
System). Cette application possède de
nombreuses fonctionnalités comme
l’accessibilité, le réseau social, la sécu-
rité, les cours, la messagerie, les profils,
le stockage, les logs, les rédactions, les
outils.
http://www.atutor.ca/
PHP 400 v2
PHP400 est un environnement d’ap-
Les modules d’EasyPHP
plications de gestion en PHP pour EasyPHP est l’un des tout premiers AMP (Apache, MySQL, PHP) pour Win-
AS/400-IBM. Cette application s’appu- dows. Depuis de nombreux mois, une version 2.0 a vue le jour avec les
ie sur Zend Core et se décompose d’un dernières versions disponibles pour chaque environnement.
framework, d’un portail, d’un généra-
teur d’applications, d’un requêteur Différentes versions de bases existent, permettant de proposer d’avoir :
SQL et des outils pour le développe- • Choix 1 : PHP 5.3.2, Apache 2.2.15, MySQL 5.1.45, PhpMyAdmin 3.3.2.
ment. • Choix 2 : PHP 5.3.2, Apache 2.2.13, MySQL 5.1.37, PhpMyAdmin 3.2.1,
http://www.phlsoft.com/ SQLite 2.8.17, Pecl 5.2.6.
Joomla 1.5.18 et 1.6 beta 4
Le CMS Joomla vient de sortir une Maintenant EasyPHP rejoint les nombreux outils qui vont vous aider à réa-
nouvelle version de PHP 1.5 avec qu- liser des sites internet. Ces outils ou environnements sont principalement
elques correctifs importants, qu’il faut
prendre en compte, et qui est compa- les CMS et les boutiques en lignes. Pour utiliser ces outils, vous devez po-
tible avec PHP 5.3. Par ailleurs, la no- sséder dans votre ordinateur, un environnement AMP comme EasyPHP.
uvelle version 1.6 est disponible avec Or, souvent, un certain nombre de paramètres et de configurations sont
une nouvelle version béta, ce qui de- nécessaires pour les faire fonctionner. EasyPHP propose des modules sup-
vrait permettre de voir prochainement
cette nouvelle version stable. plémentaires que vous devez installer mais déjà paramétrés pour que vous
http://www.joomla.fr n’ayez presque rien à faire.
Les outils que vous pouvez utiliser avec un minimum de clics sont : Spip,
Drupal 6.17 Wordpress, Prestashop. Bien entendu, vous pouvez pré-installer aussi
Le CMS Drupal vient de sortir la no-
uvelle version 6.17 qu’il est important Joomla ou Drupal très facilement. Enfin, EasyPHP est aussi un environne-
de mettre à jour car de nombreux ment, c’est à dire que vous pouvez l’installer sur différents supports comme
bugs ont été corrigés par rapport aux un disque amovible, une clé USB ce qui vous permettra de l’utiliser sur dif-
versions précédentes.
http://www.drupal.org férents ordinateurs.
http://www.easyphp.org
6 6/2010
Projets
<<TOP>>
<<SHORT_NEWS>>
<<BODY>>
3 www.phpsolmag.org 5/2010 7
Interview
Intertview
de Philippe Montarges,
co-président d’Alter Way
Philippe Montarges, PHP Solutions : Bonjour, tout d’abord nous vous remercions de
co-président d’Alter Way. nous accorder du temps pour cette interview. Pourriez-vous racon-
ter à nos lecteurs sur quels projets vous êtes en train de travailler ?
Philippe Montarges : Nous sommes un opérateur de service Open Sour-
ce et à ce titre nous intervenons sur des projets de conseil et de réalisa-
tion, mais également sur de l’hébergement et de la formation sur 4 socles
technologiques principaux : PHP, Python, Java et Ruby.
Concernant plus particulièrement la plateforme PHP, nous travaillons
actuellement à la fois sur des projets d’intégration de solutions aussi bien
dans la gestion de contenu avec notamment Drupal, que dans le com-
merce électronique avec Magento, ou encore dans le CRM avec Sugar-
CRM, mais également sur des projets construits intégralement sur des
développements spécifiques en PHP. Dans ce cas, nos appuyons systé-
matiquement nos développements sur un framework : Symfony ou Zend
Framework, en fonction de la typologie de projet.
8 6/2010
Interview
HTML5 et CSS 3 vont donc accroître la productivité des laquelle on peut produire une page web fonctionnelle.
utilisateurs, en leur permettant d’obtenir des applica- Cela a souvent permis à PHP de combler son retard en-
tions riches oů et quand ils le souhaitent. tre les applications DSI structurantes et les défis métiers
Reste une certaine incertitude, malgré l’implication du quotidien. Aujourd’hui, ces applications de confort de-
désormais réelle des 4 grands éditeurs de navigateurs viennent des applications critiques. L’industrialisation est
Microsoft ; Apple ; Mozilla et Opera, sur la date de sortie une nouvelle frontière pour PHP : la capacité du langage
effective de cette nouvelle version. à être industrialisé, à produire des projets de qualité pro-
fessionnelle dans des délais et des budgets maîtrisés.
PS : Est-ce que vous pensez, comme beaucoup de Un autre avantage toujours à l’ordre du jour : les
contributeurs, que la mort de PHP 6 ne changera coûts d’hébergement d’applications PHP sont très
rien au niveau de la confiance qu’accordent les en- réduits. Il est beaucoup plus économique de concevoir
treprises en cette technologie ? et utiliser des plateformes d’hébergement en PHP qu’en
PM : Difficile de parler de la mort d’un projet qui n’est Java ou Ruby par exemple.
même pas né! La fin de PHP6 témoigne de la capa-
cité de la communauté PHP à admettre ses erreurs PS : Est-ce que vous pensez qu’actuellement obte-
et repartir sur de nouvelles bases plus saines. Dans nir une certification PHP 5 ou Zend Framework est
ces conditions, les entreprises devraient être rassurées un réel plus, ou juste une décoration ?
quant à la maturité du langage et de sa communauté. Il PM : Ces certifications exigent toutes deux un très bon
est également du rôle d’Alter Way d’évangéliser autour niveau dans les capacités testées. Elles incitent les
de ces événements et d’en expliquer les enjeux. développeurs qui les passent à faire le point sur leurs
La démarche choisie pour développer PHP6 s’est connaissances. Elles permettent véritablement de ju-
avérée inadaptée, car techniquement trop complexe. El- ger de la qualité du profil certifié.
le a fini par décourager les contributeurs qui ont reporté La certification représente donc un atout à plusieurs
leur énergie sur la branche 5 ce qui a entraîné la sortie niveaux : la confiance qu’un client peut apporter à un
de la version PHP5.3 qui n’a de mineure que le nom. Au prestataire qui possède des profils certifiés, mais aussi
bout du compte, la version 5.4 reprendra probablement être rassuré sur les capacités d’un candidat certifié lors
l’essentiel des fonctionnalités de la 6 et sera un bon d’un processus d’embauche. De plus, ces certifications
tremplin pour une nouvelle version majeure de PHP. participent encore une fois au caractère industriel des
composants concernés.
PS : Quels sont les projets à venir d’Alter Way ?
PM : En ce qui concerne le développement de nouvelles PS : Comment vous voyez le web de demain et du
activités, nous menons actuellement une réflexion sur développement de PHP dans les années à venir ?
l’intégration des technologies de virtualisation d’Ubuntu PM : Massivement orienté cloud. Massivement multi-
et l’opportunité de devenir un centre de ‘private open plateformes. Un web orienté productivité et social no-
cloud’. Nous étudions les initiatives portées dans ce do- tamment grâce à HTML 5 et CSS 3.
maine par les pôles de compétitivité, notamment le pro- Après 5 années au cours desquelles PHP est passé
jet Compatible One (un projet de cloud ouvert mené par du stade d’outsider au stade d’outil professionnel ma-
System@tic et SCS). jeur, le langage entre à présent dans une phase d’in-
Par ailleurs en ce qui concerne le développement de la dustrialisation. Les premiers outils sont déjà bien établis
société, nous allons procéder à de nouvelles opérations de (tests unitaires, tests fonctionnels, intégration continue,
croissance externes d’ici à la fin de l’année. Nous annon- analyse de code) et n’ont pas à rougir face à ceux dis-
cerons d’ailleurs dans quelques jours une acquisition dans ponibles pour d’autres plateformes. D’autre part, une ini-
le secteur du Web qui viendra renforcer notre activité Solu- tiative a été lancée par les meneurs des principaux pro-
tions (intégration, développement, infogérance et TMA). jets PHP (Symfony, Zend Framework, Drupal, Joomla,
Enfin, afin de soutenir nos objectifs de croissance PEAR, Doctrine, etc.) afin de définir des règles commu-
pour l’année 2010 (15 millions d’euros de chiffre d’af- nes visant à améliorer l’interopérabilité entre les librairies
faires consolidé, dont 11 millions en croissance orga- PHP. À cela s’ajoute l’arrivée d’outils clairement orientés
nique), nous avons mis en place une politique de re- entreprise comme Zend Server, une pile LAMP commer-
crutement très volontariste avec près de 50 postes cialisée par Zend qui propose un support commercial.
à pourvoir d’ici la fin de l’année, soit une croissance de On voit là la capacité des acteurs tant commerciaux que
40% de notre effectif. communautaires du monde PHP à travailler ensemble
pour faire évoluer cette technologie de façon très prag-
PS : Pourquoi, à votre avis, PHP a-t’il pris autant matique par rapport aux attentes des utilisateurs.
d’importance dans le monde web ?
PM : L’origine du succès originel de PHP tient probable- PS : Merci beaucoup pour le temps que vous avez
ment à sa simplicité de prise en main et la facilité avec bien voulu nous accorder.
www.phpsolmag.org 9
Outils
Le système
de flux de travail CuteFlow
Plusieurs systèmes de collaboration électroniques sont
maintenant disponibles, mais ces systèmes sont souvent
trop complexes pour de petites équipes.
A
ujourd’hui, des pressions internes à l’entreprise Installation
et externes nous imposent d’évoluer constam- La circulation des documents par le système de work-
ment. C’est de toute évidence le moyen le plus flow CuteFlow nécessite un serveur web (Apache 1.3.x
efficace pour stimuler le dynamisme d’une entreprise. ou plus récent), avec PHP et MySQL comme base de
Pour cette raison, un système de flux de travail, permet- données et un serveur de courrier électronique que vo-
tant la circulation et la validation des tâches à accom- us pouvez régler via SMTP.
plir entre différents acteurs d’un processus, constitue L’archive d’installation des fichiers CuteFlow est di-
un élément fondamental dans une entreprise. sponible sur le site de SourceForge : http://downloads.
Un outil open source appelé CuteFlow [1] prend en sourceforge.net/cuteflow
charge les flux de documents inter-plate-forme, il permet Il vous suffit alors de la décompacter directement
la circulation et la validation de documents entre les utili- dans le répertoire public de votre serveur web. Ensuite,
sateurs tout en gérant les permissions de chacun [2]. n’oubliez pas de remplacer l’adresse IP par celle de vo-
C’est un logiciel de travail collaboratif proposant un tre serveur web.
flux de travail. Il est fondé sur du PHP/MySQL [2]. Le programme lance immédiatement l’installation
Dans cet article, nous vous présentons tout d’abord qui comprend cinq étapes :
les fonctionnalités du logiciel, son installation et sa con-
figuration ; par la suite, nous expliquerons la circulation
et la validation des documents.
Fonctionnalités
Les fonctionnalités du logiciel sont :
10 6/2010
CuteFlow Figure 1. L’interface de vérification
Figure 1. L’interface de vérification
Configuration
Après avoir terminé l’installation, vous êtes porté au
front-office. Une fois que vous ouvrez une session avec
admin comme nom d’utilisateur et admin comme mot
de passe (Figure 3), le programme ouvre automatiqu-
ement la page A faire (Figure 4) ; cette page vous don-
ne un aperçu des circulations actuellement dans l’atten-
te de votre nœud.
Sur le côté gauche, vous pouvez consulter le pro-
Figure 5. La page d’ajout d’un utilisateur
gramme des quatre fonctions principales : Circula- Figure 5. La page d’ajout d’un utilisateur
tions, Gestion, Administration et Déconnexion.
Figure 5. La page d’ajout d’un utilisateur
En tant qu’administrateur, vous pouvez maintenant
configurer CuteFlow, ajouter et supprimer un utilisateur,
modifier la base de données, le serveur de messagerie
et les paramètres de front-office.
En cliquant sur Utilisateur, vous voyez une liste des
employés, qui comprend des données typiques telles
que les noms et les prénoms, les noms des utilisateurs,
leurs e-mails, un indicateur informant si l’employé est
en ligne ou hors ligne, des options sous forme d’icônes
donnant le privilège soit de supprimer un utilisateur, soit Figure 6. La page de notification
de montrer des détails de son compte. Figure 6. La page de notification
www.phpsolmag.org 11
Outils
Figure 6. La page de notification
Circulation et Validation
Pour lancer votre première circulation de documents
avec CuteFlow, vous devez définir les champs d’op-
tions, le modèle de document et la liste de diffusion.
Les Champs vous permettent de définir la façon
dont les utilisateurs sont autorisés ou non à ajouter des
informations à la circulation. CuteFlow distingue dif-
Figure 11.
Figure 11. La page des11.
Figure La page
page des
des circulations
circulations
La circulations archivées
archivées archivées
férents types d’information.
12 6/2010
Vous pouvez même permettre aux utilisateurs de
télécharger des fichiers en pièces jointes à la circula-
tion.
Vous pouvez transmettre des vidéos ou des enregi-
Rejoignez
RejoignezleleClub
Club.PRO
.PRO Pour
Pourplus
Pourplusdedede
plus renseignement
renseignement: :editor@phpsolmag.org
renseignement editor@phpsolmag.org
: editor@phpsolmag.org
strements audio sous forme de pièces jointes à la diffu-
sion des documents. Ston
Ston
Ston eld Inworld
eldeldInworld
Inworld
Stoneld Inworld propose aux entreprises des solutions globale d’intègration d’Internet et des Univers
Le modèle de documents vous permet de créer un Ston
Virtuels
eldeld
Ston Inworld
dans
Inworld
leur
propose
propose
stratégie
auxaux
entreprises desdes
entreprises
dededéveloppement.
solutions globale
solutions
Au-delà
globale
dedeses
d’intègration d’Internet
d’intègration et des
d’Internet Univers
et des Univers
Virtuels dans
Virtuels leurleur
dans stratégie
stratégie développement.
de développement. Au-delà
Au-delà sesservices,
de services,
ses lalasociété
services, société consacre
consacre
la société 30%
consacre dede de
30%30%
modèle associé à un service. ses ressources
sessesressources à
ressourcesdes
à des travaux
travaux
à des de R&D
de de
travaux sur
R&DR&D le
sursure-Commerce
le e-Commerce
le e-Commerceet le e-Learning
et leete-Learning dans
le e-Learning les
dansdans Mondes
les les
Mondes Virtuels.
MondesVirtuels.
Virtuels.
A l’étape suivante, lorsque vous ajoutez des listes
d’abonnés, vous décidez des associations de modèles
aux documents. Vous pouvez attribuer un modèle dif- COGNIX
COGNIXSystems
COGNIX Systems
Systems
Conseil, conception etetdéveloppement d’d’applications évoluées pour leslessystèmes d’informations Internet/
férent à chaque liste. Conseil,
Conseil, conception
conception
intranet/extranet. Alliant
et développement
développement
leslescompétences
d’applications
applications
d’une SSII
évoluées
évoluées
etetd’une Web
pourpour
Agency,
les systèmes
systèmes
Cognix
d’informations
d’informations
Systems
Internet/
Internet/
conçoit des
intranet/extranet.
intranet/extranet. Alliant
Alliant les compétences
compétences d’une
d’une SSIISSII et d’une
d’une WebWeb Agency,
Agency, Cognix
Cognix Systems
Systems conçoit
conçoit desdes
Pour lancer une nouvelle circulation, allez à l’onglet applicatifs
applicatifsetetportails
applicatifs portailsweb
et portails à àl’el’rgonomie
webweb eàrgonomie travaillée
l’ergonomie etetdes
travaillée
travaillée et sites
des des Internet
sitessites à àforte
Internet
Internet valeur
à forte
forte ajoutée.
valeur
valeur ajoutée.
ajoutée.
Circulations, cliquez sur l’élément Circulations, puis http://www.cognix-systems.com
http://www.cognix-systems.com
http://www.cognix-systems.com
sur le lien Nouveau circulation, saisissez le nom de
la circulation et ajoutez une pièce jointe (Figure 8). En
Anaska
AnaskaFormation
Anaska Formation
Formation
cliquant sur le bouton Suivant, les boîtes de dialogue Anaska estestleest
Anaska
Anaska lespécialiste
spécialiste des
desformations
le spécialiste des
formations sursurles
formations lestechnologies
sur les OpenSource.
technologies
technologies EnEnpartenariat
OpenSource.
OpenSource. En avec
partenariat
partenariat MySQL
avecavec MySQL
MySQL
qui suivent vous permettent de modifier la liste d’envoi AB, Mandriva,
AB,AB, Mandriva,
Mandriva, Zend
Zendetetd'autres
Zend acteurs
et d'autres
d'autres dedelade
acteurs
acteurs lacommunauté, Anaska
la communauté,
communauté, vous
Anaska
Anaska propose
vousvous ununcatalogue
propose
propose dedeplus
un catalogue
catalogue de
plusplus
dede50de
50formations
50 formations dédiés aux
dédiés auxtechnologies
aux duduLibre.
technologies du Libre.
(Figure 9) et les paramètres du modèle. formations
http://www.anaska.com
dédiés technologies Libre.
http://www.anaska.com
http://www.anaska.com
En cliquant sur le bouton Terminer, votre circulation
est activée (Figure 10). Enfin, pour la validation des do-
cuments, en cliquant sur l’icône de la circulation Modi- WEB82
WEB82
WEB82
Création etethébergements
Création ethébergements
hébergements dedesites web
desitessites pour
webweb particuliers,
pourpour associations,
particuliers, associations,entreprises, e-commerce.
entreprises, e-commerce.
fier dans la colonne Options et si le document dans vo- Création particuliers, associations, entreprises, e-commerce.
Développement
Développement
Développement entierement
entierement
entierement aux normes
auxauxnormes W3C
normes W3C (www.w3.org)
W3C (www.w3.org)
(www.w3.org) dedesites
de web
sitessites dedequalité,
webweb de auaugraphisme
qualité,
qualité, au graphisme
graphisme
tre nœud est accepté, vous pouvez passer la circulation soigné
soigné etetemployant
soigné employant leslesdernieres
et employant les
dernieres technologies
dernieres duduweb
technologies
technologies du (PHP5,
webweb MySQL5,
(PHP5,
(PHP5, MySQL5,
MySQL5, Ajax, XHTML,
Ajax,Ajax, CSS2).
XHTML,
XHTML, CSS2).
CSS2).
au nœud suivant. http://www.web82.net
http://www.web82.net
http://www.web82.net
Quand la circulation du document est terminée, Cu-
teFlow l’a mise en archive (Figure 11) et fait automati-
Core-Techs
Core-Techs
Core-Techs
quement la mise à jour de la liste des circulations des Expert des
Expert solutions dedegestion etetdeetdecommunication d’entreprise enenOpen Source, Core-Techs
Expert desdes solutions
solutions degestion
gestion de communication
communication d’entreprise
d’entreprise en
OpenOpen Source,
Source, Core-Techs
Core-Techs
documents. conçoit,
conçoit, integre,
conçoit,integre,déploie
integre,
déploieetetmaintient
déploie etmaintient
maintientdes systemes
desdes dedeGestion
systemes
systemes deGestiondedeContenu
Gestion deContenu Web,
Contenu Web, dedeGestion
Web, de Gestion
Gestion
Documentaire,
Documentaire,
Documentaire, dedeGestion
de
Gestiondedelade
Gestion laRelation
la Relation
Relation Client (CRM),
Client
Client d’ecommerce
(CRM),
(CRM), etetdede
d’ecommerce
d’ecommerce ettravail
de ollaboratif.
travail
travail ollaboratif.
ollaboratif.
http://www.core-techs.fr
http://www.core-techs.fr
http://www.core-techs.fr
Conclusion
Vous venez de découvrir le système de workflow Cute-
Flow qui est un système de collaboration électronique POP
POP
POP FACTORY
FACTORY
FACTORY
PoP Factory,SSII spécialisée Web. Développement de solutions applicatives spéciques ; offre de
PoP
simple pour les petites équipes. PoPFactory,SSII
Factory,SSIIspécialisée
spécialiséeWeb.Web.Développement
Développementdedesolutions solutionsapplicatives
applicativesspéci
spéciques
ques; ;offre
offredede
solutions
solutions packagées : catalogue numérique, e-commerce, livre/magazine numérique, envoi SMS. Nous
solutions packagées : catalogue numérique, e-commerce, livre/magazine numérique, envoi SMS.Nous
packagées : catalogue numérique, e-commerce, livre/magazine numérique, envoi SMS. Nous
Il ne nous reste plus qu’à vous souhaiter bon coura- accompagnons clients
accompagnons nos clients autout au long de projet
leur projet : audit, conseil, développement, suivi et gestion.
accompagnonsnos nos clientstout
tout aulong
longdedeleur
leur projet: audit,
: audit,conseil,
conseil,développement,
développement,suivi
suivietetgestion.
gestion.
ge dans l’utilisation de ce système qui vous fera gagner http://www.popfactory.com / info@popfactory.fr
http://www.popfactory.com
http://www.popfactory.com/ info@popfactory.fr
/ info@popfactory.fr
du temps.
Blue
Blue
BlueNote
NoteNote Systems
Systems
Systems
Spécialistes en CRM Open Source, nous proposons une offre complète de prestations sur la
Spécialistes
SpécialistesenenCRMCRMOpenOpenSource,
Source,nousnousproposons
proposonsune uneoffre
offrecomplète
complètededeprestations
prestationssursurlala
solution SugarCRM.
solution Notre valeur ajoutée réside dans une expertise réactive et une expérience des
solutionSugarCRM.
SugarCRM.Notre
Notrevaleur
valeurajoutée
ajoutéeréside
résidedans
dansune uneexpertise
expertiseréactive
réactiveetetune
uneexpérience
expériencedesdes
problématiques
problématiques de ladeGRC.
la GRC.
NousNous
vous vous aidons
aidons à à letirermeilleur
tirer le meilleur
parti parti
de de votre
votre solution
solution CRM.CRM.
problématiques de la GRC. Nous vous aidons à tirer le meilleur parti de votre solution CRM.
http://www.bluenote-systems.com
http://www.bluenote-systems.com
http://www.bluenote-systems.com
Intelligence
Intelligence
Intelligence PowerPower
Power
Conseil, Expertises,
Conseil, Expertises, Formations et Projets E-business centrés au tour du cĞur de métier : la Business
Formations etetProjets E-business centrés
Conseil, Expertises,
Intelligence. Formations
Intelligence Power Projets
vous E-business
propose centrésauau
des solutions
tour
tourduducĞur
innovantes cĞur
pour
dedemétier
métierla: la: technologie
aligner laBusiness
Business sur
Intelligence.
Intelligence. Intelligence
Intelligence Power
Powervous
vous propose
proposedes solutions
des innovantes
solutions innovantes pour aligner
pour alignerlalatechnologie
technologie sursur
la stratégie
lalastratégie de votre
dedevotre entreprise.
entreprise.
stratégie votre entreprise.
http://www.intelligencepower.com
http://www.intelligencepower.com
http://www.intelligencepower.com
Web
Web Alliance
Alliance
AZZA NAFTI Web
Vous Alliance
souhaitez être en première page des moteurs de recherche ? Rejoignez-nous, 100% des clients
Vous
Vous souhaitez
souhaitez être enenpremière page
pagedes moteurs
moteursde derecherche ? ?Rejoignez-nous, 100% des
desclients
Web Web Allianceêtre
Alliance sont enpremière
1ère page dedesGoogle. Web recherche
Alliance, Rejoignez-nous,
société de conseil 100%
spécialisée clients
dans le
Maîtrisard en informatique. Elle travaille dans une société de déve- Alliancesont
Webréférencement enen1ère
sontinternet, page
1èrevous
pagededeGoogle.
propose Google.
son
Web
Web
expertise
Alliance,
Alliance, société
société
(référencement,
dedeconseil
liens
spécialisée
conseil spécialisée
sponsorisés,
dans
danslele
web-marketing).
référencement
référencement internet, vous propose son expertise (référencement, liens sponsorisés, web-marketing).
internet, vous propose son expertise (référencement, liens sponsorisés, web-marketing).
loppement web Synergy Space (http://www.synergy-space.com/). www.web-alliance.fr
www.web-alliance.fr
www.web-alliance.fr
Les divers projets qui lui ont été confiés l’ont amenée à enrichir ses
Club.PRO
Club .PRO
connaissances en matière de conception et de développement dans
divers langages et de se passionner pour le développement web.
Contact : n_azza@hotmail.fr.
www.phpsolmag.org 13
Projets
Communication
Flex 4 et PHP 5.3
Toute tentative de lancer un débat stérile mise à part,
si HTML5 est actuellement sous les feux de la rampe,
Flash reste bien présent sur le web. Il existe beaucoup
d’options pour communiquer avec la couche métier
d’une application, le protocole AMF en fait partie.
D
ans le cadre d’un projet, il est préférable d’utili- tement, système de gestion de branches extrêmement
ser un Système de Contrôle de Version (SCV, puissant, copie intégrale du dépôt en cas de crash d’un
en anglais Control Versioning System (CVS)) des dépôts distants). Pour plus d’informations, le livre
facilitant le travail en équipe, le suivi de version et ap- Pro Git http://progit.org/book/ (rédigé par Scott Chacon)
portant beaucoup d’autres avantages qu’il serait fa- est une excellente source d’information sur l’utilisation
stidieux de détailler ici, d’autant qu’il ne s’agit pas du de GIT.
but premier de cet article. Aujourd’hui, il existe différent
système de contrôle de version : Le protocole AMF
AMF signifie Action Message Format, il s’agît d’un pro-
• CVS : un peu âgé aujourd’hui, il est toujours utili- tocole d’échange de données basé sur SOAP (Simple
sé par la communauté de FreeBSD, par exemple, Object Access Protocol) introduit il y a maintenant qu-
et ce pour des raisons historiques. elques années, lors de la sortie du Flash Player 6. Le
• SVN : beaucoup utilisé aujourd’hui, SVN est un outil principal avantage contrairement aux solutions textuel-
classique de suivi de version. les (XML, JSON, etc.) est que ce n’est plus du texte
qui va transiter entre le serveur et le client, mais des
Ces deux exemples ont en commun le coté centrali- instances d’objets, rendant la réponse directement uti-
sé, c’est à dire que l’utilisateur crée sa copie de travail lisable. Mieux encore, il est possible de mettre en pla-
(Working Copy, en anglais) en local sur son poste, mais ce un class Mapping, c’est-à-dire d’associer une classe
envoie ses modification sur un serveur distant. Ce prin- PHP à une classe Actionscript et ainsi s’assurer que les
cipe de centralisation du suivi de version n’est pas sans deux technologies parlent la même langue.
contraintes, c’est pourquoi de plus en plus aujourd’hui Attention, les alternatives XML ou JSON restent to-
on lui préfère des outils comme GIT ou Bazaar, qui sont ut à fait viable (même si l’utilisation de données au for-
décentralisés. A contrario d’un SVN, l’utilisateur aura mat JSON n’est pas supportée nativement par Flash)
son propre serveur de suivi de version sur sa machine, mais peuvent être un vrai gouffre dans les ressources
et une liste de dépôts distants (en anglais, remote) de- consommées et le temps de traitement (conversion
puis lesquels il va récupérer les modifications effectu- des nœuds en instance de classes du modèle). Ici, le
ées (c’est l’action de pull ou de fetch), et vers lesquels temps de traitement n’est plus puisque, comme déclaré
il va envoyer ses modifications (action de push). Les plus haut, la réponse du serveur est directement utilisa-
avantages sont multiples (possibilité de commiter ses ble, dû au fait que les données circulent dans un format
modifications sans les envoyer à ses collègues direc- binaire.
14 6/2010
Flash et PHP
www.phpsolmag.org 15
Projets
L’application est très simple, elle va contenir deux nous allons instancier. De cette manière, plutôt que de
composants principaux. Le premier sera la façade de faire un new \Zend\AMF\Server();, il sera plus simple
l’application, elle comprendra un List et un bouton qui de faire new Server().
permettra d’afficher le formulaire d’ajout d’un post. Le Afin, de ne pas trop perdre de temps avec les dif-
deuxième composant sera ledit formulaire d’ajout/édi- férentes dépendances entre les composants du Zend
tion d’un post, il comprendra un TextInput, permettant Framework, il est de bon ton de laisser faire le compo-
de saisir le titre du post, un TextArea permettant d’en sant Autoloader.
saisir le contenu, un bouton permettant d’envoyer le Les lignes suivantes permettent de mettre en pla-
formulaire et éventuellement un bouton pour annuler ce le serveur AMF qui traitera les demandes envoy-
et fermer le formulaire. ées depuis l’application Flex. La méthode setClass
Pourquoi éventuellement ? La séparation comporte- permet de dire au serveur de prendre en compte la
ment/aspect graphique des composants permet, via un classe de service Blog, la méthode setClassMap per-
metatag SkinPart de déclarer quels sont les éléments met d’associer (en anglais, map) la classe Actionscript
graphiques qu’un skin doit posséder (un bouton, un com.palleas.AIA.model.Post à la classe PHP AIA\
champ de texte, une image, etc.). Ce metatag prend Post.
un attribut required qui permet, comme son nom l’indi- Le Listing 4 présente le contenu dudit fichier. De
que, de spécifier si ce composant est obligatoire, ou s’il la même manière que pour le projet Flex, les sour-
est facultatif. Dans le cas de cet article, le bouton can- ces PHP de cet exemple sont disponibles sur Github,
cel est facultatif, pour l’exemple. à l’adresse suivante : http://github.com/Palleas/AIA-
Le Listing 3 présente les classes Facade et PostForm, backend.
cependant les classes de skin ne sont pas contenu-
es dans cet article, faute de place. L’ensemble du pro- Communication entre Flex et PHP
jet Flex est disponible sur Github à l’adresse suivante : Une fois les composants Flex et la passerelle mis en
http://github.com/Palleas/AIA-desktop. place, il ne reste pas beaucoup de choses à dévelop-
per pour établir une première communication entre
Intégration du Zend Framework et mise Flex et PHP. Le Listing 5 présente la manière d’appe-
en place de la passerelle AMF ler une méthode (via la méthode getOperation) d’une
Pour cet article, nous utiliserons la version 2 du Zend classe de service précise (via la propriété source) via
Framework, aujourd’hui toujours en développement. La une instance de la classe RemoteObject.
raison à cela est que cette version casse la compatibi-
lité avec la branche 1 en utilisant notamment les espa- Conclusion
ces de nom. De plus, le Zend Framework est désorma- Cet article a montré la simplicité de mettre en place une
is accessible via un dépôt GIT. Pour l’intégrer dans ce passerelle pour faire communiquer une application Flex
tutoriel, il va s’agir de passer par une fonctionnalité de avec une couche métier développée en PHP. Ce proto-
GIT : les submodules. cole ouvre de nombreuses possibilités, il serait en effet
Très similaire aux dépôts déclarés externes (propri- également possible d’uploader un fichier directement
été SVN externals) de Subversion, les submodules vont via le protocole AMF, mettre en place un système de
permettre de lier un dépôt GIT à un autre : session, etc.
Pour plus d’information sur le protocole AMF, la
$ git submodule add git://git.zendframework. page wikipedia dédiée (http://fr.wikipedia.org/wiki/Ac-
com/zf.git lib/vendor/zf tion_Message_Format) propose quelques liens, no-
$ git submodule update tamment vers la spécification du protocole. La page
officielle du ZendFramework v2, est également une
Là encore, plus d’informations sur les submodules très bonne source d’informations (http://git.zendfra-
sont disponibles dans l’excellent livre de Scott Cha- mework.com/?a=summary&p=zf). Enfin, la page Flex
con. sur le site d’Adobe (http://www.adobe.com/products/
Pour les personnes familières du Zend Framework, flex/) propose des liens vers des exemples, des tu-
le contenu du fichier gateway.php n’est pas très compli- toriels (dont des tutoriels vidéos) et la page du projet
qué à appréhender. En effet, les 10 premières lignes ne Flash Builder, EDI dédié au développement d’applica-
servent qu’à modifier le chemin d’inclusion de php (en tions Flash/Flex.
anglais, include path) pour lui faire prendre en comp-
te le Zend Framework et à inclure la classe de modèle
Post ainsi que la classe de service Blog. Les lignes su-
ivantes sont cependant plus intéressantes puisqu’elles ROMAIN POUCLET
font intervenir le mot clé use de PHP 5.3. L’intérêt de ce L’auteur est développeur multimédia travaillant sur Lyon, majori-
mot clé est de pouvoir simplifier le nom des classes que tairement avec les technologies Flex et PHP.
16 6/2010
Flash et PHP
www.phpsolmag.org 17
Dossier
Acquérir de la vitesse
avec Zend Framework
Le Zend Framework existe maintenant depuis plusieurs années.
La dernière version (1.10) apporte déjà tout ce que l'on peut
souhaiter avoir comme éléments pour accélérer la production
de site web dynamique. Les classes et outils proposés permettent
de couvrir nos besoins les plus exotiques, depuis la génération
du projet jusqu'à la gestion de barre code en passant par les flux RSS.
J
e me propose, par cette série d’articles de passer le passage, par étapes successives, d’un framework
en revue les classes les plus importantes pour MVC qui n’était plus soutenu vers ZF. Les développe-
faire un site évolué. Par conséquent, nous par- ments d’un Framework (accès à la Base de données
lerons création d’un projet ZF, organisation des librai- par exemple) cohabitant très bien avec les développe-
ries et Autoload de classe, Interfaçage avec le Javas- ments de l’autre.
cript et bien entendu AJAX. De quoi démarrer un projet Autre avantage de ZF : c’est son coût d’entrée.
en attendant le ou les prochains articles où j’aimerai C’est-à-dire l’investissement (en terme de temps) né-
parler de debug sous Eclipse, de modèle de données, cessaire pour l’utiliser ne serait-ce que correctement.
de la création de vues efficaces et donc de helpers Fan de Symfony de la première heure (celle où ZF
de vue, de cache, de validation des données issues n’était encore qu’un embryon prometteur), je dois ad-
de l’extérieur, des formulaires, des tests et de bien mettre qu’il m’a fallu plus de temps pour entrer dedans
d’autres choses. J’essayerai aussi de vous donner des que le ZF. Pourquoi me direz-vous, tous simplement
éléments de recherche dans la documentation Zend parce que l’on s’intéresse aux choses au fur et à mesu-
car depuis l’évolution de celle-ci, la recherche en ligne re, graduellement, jours après jours. En conséquence,
ne fonctionnant plus, il n’est pas toujours aisé de s’y je ne l’utilise pas encore à 100%. Mais, au final cela
retrouver. ne me gène pas, et surtout, le plus important, je reste
Je ne reviendrai pas sur les sujets déjà abordés dans une dynamique de diminution du temps de déve-
dans PHP Solutions autour du Framework Zend (que je loppement.
nommerai ZF dans le reste de l’article) sauf si la version
1.10 apporte des éléments nouveaux ou si la lisibilité Débutons ensemble
de l’article l’impose. Dans la mesure où je les connais, Je parts donc du principe que vous avez lu ou pou-
je citerai les articles et n° de PHP Solutions qui traitent vez lire les articles sur comment démarrer avec ZF
du sujet. 1.8 et comment gérer l’authentification. Articles pa-
Mais avant d’aller plus loin, j’aimerais vous faire part rus dans le numéro spécial PHP STARTER KIT FRA-
d’une remarque personnelle. Si ZF rencontre un si vif MEWORKS de septembre 2009. Malgré cela, quand
succès c’est que ce n’est pas vraiment un framework
comme Cake PHP ou Symfony. C’est plus une librairie
de classes ayant une certaine homogénéité et des câ-
blages prés définis. Ce qui apporte de la souplesse, no-
tamment lors des migrations. J’ai ainsi vécu en ZF 1.7 Figure 1. Extrait doc ZEND
18 6/2010
Framework Zend
Comment débuter ?
Par expérience, ce n’est pas l’installation initiale du
Framework qui pose problème. De nombreux tuto-
riels (dont ceux de la doc Zend) permettent de le faire
très facilement. Par contre on me demande à chaque Figure 2. Création d’une commande ZF
fois : comment est-ce que j’organise mon application,
où est-ce que je mets mes déclarations, mes initia-
lisations mes développements ? Comment je l’utilise
avec Eclipse ? Autant de questions sur l’architecture
globale. Je vais me concentrer sur ces aspects, rare-
ment abordés.
Avec ZF 1.10.X est arrivée la librairie Zend_Tool. El-
le apporte une couche homogénéisant les Zend_Tool_
Framework et Zend_Tool_project déjà existant en 1.8.
Même si je ne suis pas fan des outils d’automatisation,
ils permettent de rapidement créer une arborescence
de projet ce qui est extrêmement pratique. Surtout pour
des tâches répétitives comme la création de modules,
de contrôleurs et d’actions (termes issus de la découpe
MVC du Framework, sujet déjà abordé dans d’autres
articles de PHP Solutions).
Cette librairie vous permettra, via Zend_Tool_Fra-
mework, de créer des outils maison et donc, pourquoi
pas, de ne déployer que les librairies que vous souhai-
tez (par exemple vous ne souhaitez pas mettre les li-
brairies liées service WEB ou restreindre l’usage de
Helper Javascript à Dojo, ... ou encore ajouter vos li-
brairies spécifiques). Utile quand vous aurez à définir
votre forge logiciel PHP. J’y reviendrai dans un autre
article.
La première étape consiste à télécharger ces outils. Figure 3. Arborescence d’un projet créé par ZF
Personnellement, j’utilise déjà d’autres librairies PEAR
et donc je préfère utiliser le loader PEAR pour récu- sur zfcampus.org, vous serez certain que votre librairie
pérer ces outils. Ainsi je suis certain que les chemins Zend Framework sera accessible dans le Include_path
d’accès sont déclarés dans mon système. Et que l’outil PHP. Pratique non ?
en ligne de commande zf est toujours accessible. Mais Cette méthode ne fait pas l’unanimité. L’un de mes
il est possible de le mettre ailleurs, l’essentiel étant collègues ne l’aime pas du tout car il n’est pas toujours
qu’en tapant zf dans une fenêtre console l’accès au fi- possible de l’utiliser sur les serveurs de production. Sur-
chier zf.bat ou zf.sh soit résolu par votre système d’ex- tout s’ils sont mutualisés ! Il préfère copier la librairie
ploitation. Zend dans le répertoire library de l’arborescence par
L'image de la Figure 1, issue de la doc ZEND, décrit défaut. C’est une excellente remarque et au final, je
comment charger, non seulement, Zend_Tool mais tout fais souvent les deux. Sans que cela ne pose de pro-
le framework Zend via PEAR. Même s’il y a une jour- blème. Par contre, attention si vous utilisez plusieurs
née de décalage dans la publication des versions de ZF versions de PHP sur votre machine ... On peut vite
www.phpsolmag.org 19
Dossier
20 6/2010
Framework Zend
La structure de l’application
Il peut être intéressant d’avoir une application séparée
en plusieurs parties autonomes mais utilisant les mê-
mes objets métier voire la même base. Par exemple
avoir une application de Front Office et une de Back
Office (un site WEB et son interface d’administration).
Zend Framework nous propose la possibilité de créer
des modules pour répondre à ce problème. Ceci n’aura
d’impact que sur la partie Application de notre dossier
projet le reste étant partagé par les différents modules.
Pratique non ? Figure 5. Outil externe pour créer un module sous Eclipse
La création de module peut se faire manuellement
mais zf_tool facilite grandement les choses. Une com- création. La Figure 5 donne l’outil à créer et la Figure 6
mande permet de créer un module : ZF create module décrit l’arborescence obtenue.
NomDeMonModule. Attention à se trouver sous le réper- Vous remarquerez que le module s’est ajouté dans
toire du projet pour lancer la commande. Là encore nous le répertoire application en créant ses sous-répertoires
pouvons créer un raccourci sous Eclipse pour faciliter la MVC propres. Ainsi avec www.monnomdedomaine.com/
www.phpsolmag.org 21
Dossier
22 6/2010
Framework Zend
existe une autre façon de faire cela. Vous pouvez uti- echo $this->ajaxResponse;
liser la configuration de votre application en définis-
?>
sant cela dans le fichier application.ini. Pour cela nous
allons ajouter, dans la rubrique production, cette dé-
claration. Pourquoi production vous demandez-vous ?
Tout d’abord car tout doit être déclaré dans produc- source.option = valeur. Dans notre cas, la ressource
tion pour que votre application fonctionne et si vous est Zend_Log.
avez des choses spécifiques pour un environnement
donné alors vous redéfinirez la valeur dans cet envi- Vive le WEB 2.0 avec ZF
ronnement. Le Listing 3 donne le code de la rubrique Le Zend Framework propose de nombreuses facilités
production. Ensuite, dans ce cas, l’init est valable dans pour faire du Web 2.0. Quel que soit le moyen par le-
tous les environnements. quel vous appelez l’application vous aurez à répondre
A partir de maintenant, vous n’aurez plus à vous en JSON, l’XML ou en HTML.•• Personnellement, je
souciez d’INCLUDE ou de REQUIRE sauf pour les fi- n'utilise que le JSON ou le HTML mais voyons ce que le
chiers de constantes globales … Personnellement je framework nous propose pour cela.
les mets dans les fichiers de config. Pour les chaînes
de caractères, mieux vaut utiliser le système d’interna- Utiliser le JSON
tionalisation pour les stocker ! Avant de passer à autre Pour faire du JSON, Zend à réaliser la classe Zend_
chose, sachez que les fonctions dont le nom débutera Json. Grâce à elle, pas besoin de créer un layout
par _init seront automatiquement lancées au démar- spécifique, la classe Zend_Json s’en charge pour
rage de l’application et permettront d’initialiser les res- vous.
sources de votre application. Voilà qui est fort intéres- Pour renvoyer des données en Json, il suffit d’uti-
sant. Par exemple, pour initialiser vos log, vous créerez liser :
une fonction _initLog(). Fonction que vous pourrez
conjuguer avec une déclaration dans votre application. $this->view->data = zend _ json::encode($data->
ini du type log.file ="/logs/logErrors.log". Données que toArray());
vous récupérerez facilement dans votre fonction _init-
Log() par $file = $this->getOption(«file»). Facile non ? Rien de plus n’est nécessaire ! Cela re-
La notation dans application.ini est la suivante : res- tournera un tableau en JavaScript. Attention à ne pas
utiliser la fonction eval() en Javascript mais plutôt trai-
ter les données du tableau pour créer vos objets appli-
Si vous désirez mettre des commentaires dans votre ap-
plication.ini, il faut mettre un caractère diese en tête de catifs. La fonction eval() est une faille de sécurité ma-
ligne. jeure. C’est pour cette raison que dans jQuery il existe
la fonction jQuery.getJSON() qui utilise un parseur de
www.phpsolmag.org 23
Dossier
Sur Internet
• Eclipse PDT : http://www.eclipse.org/pdt/downloads/,
• Librairie PEAR : http://pear.php.net/,
• Téléchargement du framework : http://framework.zend.com/download/latest,
• Documentation Zend Framework : http://framework.zend.com/manual/fr/manual.html,
• Forum Français autour de Zend Framework : http://www.z-f.fr/,
• Liste des tags phpDoc : http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html.
données pour intégrer les données de la réponse. C’est Zend_View). Je les aborderai dans mon prochain ar-
un peut plus lent mais plus sûr. ticle, c’est promis. Il sont extrêmement pratiques sur-
Pour aller un peut plus loin il existe une petite tout les Helpers de vue.
fonction pratique Zend_Json::prettyPrint() qui
permet d’afficher le JSON généré de façon lisible. Conclusion
Cela évite de regarder la réponse sous Firebug. Il Voici les premiers éléments que je souhaitais parta-
est possible de passer un objet en paramètre de la ger avec vous. Ils ne sont pas suffisants pour utiliser
fonction encode mais le résultat restera un tableau pleinement le framework Zend. Il vous faudra attendre
javascript et seuls les paramètres publics seront mon (ou mes) prochain(s) article(s) pour aller plus vers
accessibles à la fonction Zend_Json::encode(). l'avant, mais n’hésitez pas à demander les sujets qui
Si vous définissez dans votre objet une fonction vous intéressent au journal, j’en tiendrai compte dans
toJson() (attention à la majuscule) alors Zend_Json le choix de mes prochains thèmes.
l’utilisera pour générer le javascript.Si vous voulez
que la réponse soit un objet Javascript plutôt qu’un
tableau il faudra le spécifier avec l’option Zend_
Json::TYPE_OBJECT.
24 6/2010
ProjetsZend
Framework
1 www.phpsolmag.org 5/2010 25
Linux
La virtualisation
sous Linux, technologies et solutions
Pourquoi virtualiser notre architecture et quels intérêts
avons-nous à le faire ?
A
ujourd’hui, la virtualisation présente un grand On comprend bien que le but de ce concept est de
nombre d’avantages : faire fonctionner plusieurs machines logiques différen-
tes que l’on nommera par la suite machines virtuel-
• une meilleure utilisation de ressources matériel- les sur une même machine physique identifiée par
les, système hôte. Ce concept s’appuie sur différentes
• une plus grande disponibilité, technologies que nous aborderons au sein de cet artic-
• une diminution du TCO1 pour les entreprises, le ; seules les solutions disponibles sous Linux seront
• un gain non négligeable pour l’environnement no- traitées.
tamment au niveau de la dissipation de chaleur Dans ce périmètre, trois grandes techniques émer-
et de la consommation d’énergie. gent :
Au travers de cet article, nous allons vous présenter • La virtualisation par isolation, communément appe-
succinctement les différentes technologies de virtuali- lée cloisonnement.
sation disponibles sous Linux. Pour ce faire, nous pro- • La virtualisation totale.
céderons à une brève présentation de la virtualisa- • La para- virtualisation & hyperviseur.
tion et ses concepts, ainsi que les enjeux autour de ce
phénomène. Ensuite, nous aborderons les différentes Ces techniques offrent des mises en œuvre et perfor-
technologies afin d’en exposer les différents aspects, et mances totalement différentes. Chacune d’elles doit
fournirons un exemple de solution associée à chacune être déployée et utilisée dans son contexte.
des technologies. Au travers des exemples de cet article, nous spé-
cifierons le contexte qui nous semble le plus appro-
La virtualisation – présentation et enjeux prié à l’utilisation de chacune d’elles. Au vu des infras-
Dans cette première partie, nous allons d’abord définir tructures informatiques de plus en plus importantes
la virtualisation et discuter sur ses apports. et complexes, on peut s’apercevoir de l’intérêt de dé-
ployer des solutions de virtualisation. Mais quels sont
Présentation les enjeux principaux et les gains apportés par la vir-
On définit en informatique la virtualisation comme un tualisation ?
ensemble de techniques matérielles et/ou logicielles mi- Grâce à la virtualisation, nous avons la possibilité
ses en œuvre pour faire fonctionner plusieurs systèmes de faire fonctionner différents systèmes définis par
d’exploitation sur la même machine. la suite comme OS2 sur le même serveur physique ;
26 6/2010
Virtualisation sous Linux
il apparaît donc trois enjeux majeurs (liste non ex- Enfin, moins de matériel détenu sera d’autant moins de
haustive) : matériel à recycler.
www.phpsolmag.org 27
•Principe de fonctionnement
ype de virtualisation présente l’avantage d’obtenir des performances quasi-natives, avec peu de
tes de performances de la machine physique (environ 2 à 4 %). Effectivement, les serveurs
Linux
uels sont identifiés par un numéro unique (n° de contexte) ; grâce à cet identifiant unique, la
chine hôte est capable d’identifier chaque process qui fonctionne (voir Figure 1).
Principe de fonctionnement
Contexte Contexte
Isolateur 1 Isolateur N Ce type de virtualisation présente l’avantage d’obtenir
Logiciel des performances quasi-natives, avec peu de pertes
de performances de la machine physique (environ 2
De Appli ……… Appli
à 4 %). Effectivement, les serveurs virtuels sont iden-
Contexte tifiés par un numéro unique (n° de contexte) ; grâce
Contrôl
Isolateur à cet identifiant unique, la machine hôte est capa-
e
Distrib ble d’identifier chaque process qui fonctionne (voir
Distrib Contexte
Isolateur N Figure 1).
On comprend que l’inconvénient majeur de cette so-
A ce jour, seule la solution OpenVz est restée en production. En effet, au moment de son
lution est la limitation des systèmes pouvant être exécu-
déploiement, seul OpenVz nous Système Exploitation
permettait une gestion du+ Driver
pare-feu au niveau du serveur virtuel
tés : seuls
(NetFilter) et la possibilité de faire de l’IPV6. OpenVz est la version libre du projet Parallels Virtuozzo. des systèmes Linux pourront être déployés
Cette solution est disponible en package Debian (.Deb) pour les distributions Debian et Ubuntu par cette technologie. Cette solution est la plus employ-
; pour
le reste des distributions, si le paquet n’est pas disponible, il est possible de récupérer le patchée lorsque
du l’on déploie en majeure partie des systèmes
noyau pour l’appliquer. Matériel Linux (peu importe la distribution) ou encore lorsqu’on
CP
Virtualisation TotaleMémoire
(ou Complète)Disque Réseau veut faire de l’hébergement Web. Avec cette techno-
U logie, il est facile de déployer des plateformes de type
Grâce à cette technologie, nous allons pouvoir virtualiser n’importe quel OS non modifié LAMP en 7.
l’encapsulant dans une machine virtuelle (voir Figure 2).
Figure 1. Virtualisation par cloisonnement
Figure 1. Virtualisation par cloisonnement
Solution : OpenVz
Machine virtuelle Machine virtuelle Machine n Les deux solutions que nous avons mises en produc-
1 2
A A A A A A tion sont les suivantes :
comprend que l’inconvénient majeur p pde cette solution
p estp la limitation
p despsystèmes pouvant être
Para-virtualisation & virtualisation
p p avec hyperviseur
p p p p
cutés : seuls des systèmes Linux pourront être déployés par cette technologie. Cette solution est
plus employée lorsque l’on déploie
l l l l l l
• Linux Vserver (projet open source).
i i en majeure i partiei des systèmes i Linux
i (peu importe la
Ce dernier type de virtualisation
Logiciel
ribution) ou encore lorsqu’onOSveut peut être classé en deux catégories que nous allons traiter •dansOpenVz.
ce
invitéfaire
+ de l’hébergement
OS invité + Web. OS Avec cette
invité + technologie, il est
paragraphe :
le de déployer des plateformes de type LAMP . 7
N Driver Driver Driver
-La para-virtualisation.
Couche abstraction Couche abstraction Couche abstraction
A ce jour, seule la solution OpenVz est restée en pro-
-La virtualisation
•Solution : OpenVz avec hyperviseur. duction. En effet, au moment de son déploiement, seu-
Matériels Matériels
deux solutions que nous avons mises en production sont les suivantes :
Matériels
le OpenVz nous permettait une gestion du pare-feu au
La technologie est identique,
-Linux Vserver la différence
(projet open source).se fait au niveau des accès aux ressources matériel,niveau
ce que du serveur virtuel (NetFilter) et la possibilité de
nous-OpenVz.
verrons par la suite. Couche Emulation faire de l’IPV6. OpenVz est la version libre du projet Pa-
rallels Virtuozzo. Cette solution est disponible en packa-
Para-virtualisation Système Exploitation Couche abstraction
ge Debian (.Deb) pour les distributions Debian et Ubun-
•Principe de fonctionnement : tu ; pour le reste des distributions, si le paquet n’est pas
Ce type de virtualisation est une évolution deMatériel
la précédente. La virtualisation totale n’avaitdisponible,
besoin il est possible de récupérer le patch du noy-
d’aucune modification
CPU des systèmes
Mémoire hôteDisques
; or, dans le Rcas de
éseau la para-virtualisation, nous avons
auaffaire
pour l’appliquer.
à des systèmes hôtes modifiés, ainsi que celui du système invité. Ces modifications sont nécessaires
pour améliorer Figure 2. Virtualisation
les performances complète
des machines virtuelles (voir Figure 3).
Figure 2. Virtualisation complète Virtualisation Totale
(ou Complète)
•Principe de fonctionnement
Machine virtuelle Machine virtuelle Machine n Grâce à cette technologie, nous allons pouvoir virtu-
Cette technologie simule au sein 1 2 aliser n’importe quel OS non modifié en l’encapsulant
A de la A machine virtuelle
A une
A nouvelle AcoucheAmatérielle (dont le
processeur) etLogiciel
aussi une nouvelle
p couche p d’abstraction.p Dans pce cas, la machine
p pvirtuelle n’adans
aucuneune machine virtuelle (voir Figure 2).
conscience d’être virtualisée etpdonc pense
p disposer du
p matériel.
p p p
De l l l l l l
Principe de fonctionnement
i i
Du point de vue du système d’exploitation, i
la machine i
virtuelle i
se trouve i même niveau de
au
privilège que Contrôle
Cette
n’importe quel autre programme en fonctionnement. On comprend bien l’impact sur
technologie simule au sein de la machine vir-
OS + Driver OS + Driver OS + Driver
tuelle une nouvelle couche matérielle (dont le pro-
Couche abstraction Couche abstraction Couche abstraction
cesseur) et aussi une nouvelle couche d’abstrac-
Interface para Interface para Interface para tion. Dans ce cas, la machine virtuelle n’a aucune
conscience d’être virtualisée et donc pense dispo-
Système hôte Couche abstraction
ser du matériel.
Du point de vue du système d’exploitation, la machine
virtuelle se trouve au même niveau de privilège que n’im-
Matériel porte quel autre programme en fonctionnement. On com-
CPU Mémoire Disques Réseau prend bien l’impact sur les performances : nous allons
avoir une perte directe et une importante dégradation
Figure 3. Para-virtualisation des performances en fonction du nombre d’applications
Figure 3. Para-virtualisation
On s’aperçoit qu’avec la para-virtualisation, contrairement à la solution précédente, la machine
28 6/2010
virtuelle est modifiée. Celle-ci dispose maintenant d’une interface de para-virtualisation qui lui sert à
La différence majeure est que l’hyperviseur est là uniquement pour gérer les ressource
matérielles. Ensuite, il fait appel à un OS2 privilégié qui est utilisé pour administrer l’hyperviseur. Ce
Virtualisation sous
OS2 privilégié est au Linux
même niveau que les systèmes invités et partage ainsi les ressources alors que
dans le cas de la para-virtualisation, c’est le système hôte qui a un accès direct au matériel. Avec
cette solution, c’est l’hyperviseur qui gère directement les ressources et les accès concurrentiels à
ces mêmes ressources, grâce à quoi nous obtenons une granularité de réglage beaucoup plus fine.
Pour les utilisateurs habitués aux solutions de virtualisation, et surtout à OpenVz, nous conseillons
vivement d’essayer cette solution.
www.phpsolmag.org 29
Linux
• La para-virtualisation. Hyperviseur
• La virtualisation avec hyperviseur. Pour le cas des hyperviseurs, le principe de fonction-
nement est quasiment le même que dans le cas de la
La technologie est identique, la différence se fait au ni- para-virtualisation : l’hyperviseur est une évolution de
veau des accès aux ressources matériel, ce que nous cette dernière, avec toujours un OS modifié mais très
verrons par la suite. légèrement (voir Figure 4).
La différence majeure est que l’hyperviseur est là
Para-virtualisation et principe de fonctionnement uniquement pour gérer les ressources matérielles.
Ce type de virtualisation est une évolution de la pré- Ensuite, il fait appel à un OS2 privilégié qui est utilisé
cédente. La virtualisation totale n’avait besoin d’aucu- pour administrer l’hyperviseur. Cet OS2 privilégié est
ne modification des systèmes hôtes; or, dans le cas au même niveau que les systèmes invités et parta-
de la para-virtualisation, nous avons affaire à des sys- ge ainsi les ressources alors que, dans le cas de la pa-
tèmes hôtes modifiés, ainsi que celui du système in- ra-virtualisation, c’est le système hôte qui a un accès
vité. Ces modifications sont nécessaires pour amé- direct au matériel. Avec cette solution, c’est l’hypervi-
liorer les performances des machines virtuelles (voir seur qui gère directement les ressources et les accès
Figure 3). concurrentiels à ces mêmes ressources, grâce à quoi
On s’aperçoit qu’avec la para-virtualisation, contrai- nous obtenons une granularité de réglage beaucoup
rement à la solution précédente, la machine virtuelle est plus fine.
modifiée. Celle-ci dispose maintenant d’une interface Cette technologie est employée le plus souvent pour
de para-virtualisation qui lui sert à obtenir des accès consolider des infrastructures et mettre en œuvre des
privilégiés, soit au niveau du matériel, soit au niveau solutions de disponibilité. Les solutions proposées di-
du système hôte. Cette modification permet d’amélio- sposent à ce jour des interfaces de management de
rer nettement les performances des machines virtuel- haut niveau et très intuitives.
les. Le seul inconvénient pour bénéficier au mieux des Ce type de technologie reste malgré tout la plus
gains de performances, est qu’il faut utiliser les pilotes utilisée, car une des plus performantes actuellement.
modifiés, sinon on se retrouve dans le cas de la virtua- De plus, elle offre davantage de possibilités que les
lisation totale. dernières technologies. En effet, cette technologie per-
Conséquence directe de cette technologie, les met de virtualiser n’importe quel système fonctionnant
systèmes invités ont conscience d’être virtualisés sur une architecture X86.
(du fait qu’ils intègrent des pilotes modifiés).
Solution : Xen
Dans cette technologie, la solution que nous n’avons
Lexique : pas encore eu l’occasion de tester (car nous avons
1
TCO : Total cost ownership ou coût total de possession. acquis récemment son concurrent direct : ne fait pas
2
OS : operating system ou système d’exploitation. l’objet de cet article) est bien sûr la solution Xen. Xen
3
Linux HA : pour high-availibility ou haute disponibilité. est actuellement dans sa version 3, et permet de vir-
4
Domain U : pour domain unpriviliged ou domaine non tualiser n’importe quel système invité non modifié. Il
privilégié.
faut tout de même posséder un processeur avec les
5
KVM : Kernel-based Virtual Machine.
6
Intel-VT et AMD-D : jeux d’instructions processeur per- jeux d’instructions Intel-VT ou AMD-V (pour version
mettant de faire tourner plusieurs systèmes d’exploitation. HVM-Xen).
7
LAMP : plateforme basée sur la suite de logiciels : Linux Dans son fonctionnement, Xen nomme son système
Apache MySQL PHP. privilégié Domain 0 pour la gestion de l’infrastructure
Xen, et les systèmes invités Domain U4. Il faut savoir,
30 6/2010
Virtualisation sous Linux
www.phpsolmag.org 31
Pratique
Introduction
à la POO avec PHP
Découvrez comment développer vos applications PHP
en utilisant la programmation orientée objet, qui vous
permettra de concevoir des productions plus fiables,
plus puissantes et plus faciles à maintenir !
P
HP devient mature : depuis sa version 5, il of- La classe
fre une implémentation du paradigme objet (voir Les classes correspondent à l’expression d’un type abs-
terminologie) relativement complète, qui permet trait. Une classe réunit des données composant le type
de développer des applications web puissantes, plus et les opérations permettant de traiter ces données. Par
faciles à améliorer et à maintenir. exemple, un verre serait définit par sa forme, le volume
La programmation orientée objet (POO, ou OOP, qu’il peut contenir et son contenant, les opérations liées
oriented object programming) a été introduite pour per- au verre seraient remplir ou vider.
mettre de fixer des méthodes facilitant la conception Un objet est une instance d’une classe, c’est à dire
et le développement de programmes. Elle permet no- la réalisation de cette classe. Par analogie, on peut con-
tamment d’améliorer l’organisation, de faciliter le travail sidérer que la classe est un moule et l’objet un gâteau
en groupe, la réutilisation ou la maintenance du code. ayant la forme de ce moule. Une classe est composée
de propriétés (ou d’attributs), ce sont des variables qui
L’objet correspondent aux données composant et caractéri-
Le concept de base de la POO est l’objet. C’est une bri- sant le type, et de méthodes qui sont des fonctions défi-
que logicielle représentant une idée, une action ou une nies à l’intérieur de la classe et permettant de manipuler
entité du monde réel. Un objet peut représenter une in- l’objet. Méthodes et propriétés peuvent être désignées
finité de notions : un champ dans un formulaire, une sous le terme commun de membre de la classe.
communication entre deux serveurs, et même un ani- Pour ne pas se perdre et se familiariser avec ces
mal ou un pantalon ! deux premières notions, voici un premier exemple :
La programmation par objets consiste à donner un l’écriture en PHP du type verre que nous avons imagi-
ensemble de valeurs ou d’opérations pour chaque type né plus tôt.
d’objet, en rendant les points communs et leurs relations
explicites, et en masquant leur fonctionnement interne. Terminologie
Dans un programme, chaque donnée traitée et d’un cer-
• Paradigme : un paradigme est un ensemble de règles
tain type, PHP propose un ensemble de types natifs (un
permettant de représenter des informations cohérentes,
nombre entier, une chaîne de caractères, un booléen), en informatique, on peut considérer que c'est un style
ou des types structurés, comme les tableaux. La pro- de programmation, une manière dont le programmeur
grammation par objet présente une nouvelle famille de voit son programme s'organiser et s'exécuter.
types : des types abstraits définis par le programmeur.
32 6/2010
POO avec PHP
www.phpsolmag.org 33
Pratique
$a = new Test();
Listing 3. L’implémentation de la classe Vaisselle
$a->nombre = 1;
class Vaisselle $b = $a;
{
private $forme; $b = new Test();
private $contenu; $b->nombre = 2;
public function _ _ construct($forme, $contenu =
'rien') echo $a->nombre.', '.$b->nombre;
{
$this->forme = $forme;
$this->remplir($contenu); Le résultat est 1, 2, $b et $a ne référencent plus le
} même objet. Enfin, dans ce dernier cas :
public function remplir($quoi)
{
$this->contenu = $quoi;
$a = new Test();
}
public function vider() $a->nombre = 1;
{
$b = &$a;
$this->contenu = 'rien';
} $b = new Test();
}
$b->nombre = 2;
echo $a->nombre.', '.$b->nombre;
ici, la variable $objet référence une nouvelle instan- Le résultat est ici 2, 2, $a et $b sont la même variable,
ce de la classe Classe. Cela signifie que la variable le premier objet Test est remplacé par le second. L’o-
$objet représente l’adresse en mémoire de l’objet no- pérateur == permet de comparer deux objets, il retour-
uvellement créé, et les conséquences sont nombreu- ne vrai si l’ensemble des attributs des deux objets sont
ses, car plusieurs variables peuvent référencer un identiques. Pour vérifier que deux variables référencent
même objet. le même objet (la même instance), il faudra utiliser l’o-
Pour être plus clair, analysons un extrait de code. pérateur ===.
Dans celui-ci, nous assignons à une variable une valeur Il est possible de définir une méthode exécutée lors
entière, nous assignons cette variable à une autre que de la création d’un objet. Cette méthode spéciale s’ap-
nous modifions. pelle le constructeur. Cette méthode doit porter le nom
__construct() (avec deux _). Elle sert généralement
$nombre = 10; à initialiser les valeurs des principaux attributs de l’objet.
$autre _ nombre = $nombre; Par exemple, le constructeur de notre classe Verre
$autre _ nombre++; pourrait être :
echo 'nombre : '.$nombre.', autre nombre :
'.$autre _ nombre; public function _ _ construct($forme, $volume,
$contenu = 'rien') {
Le résultat sera nombre : 10, autre nombre : 11. $this->forme = $forme;
Regardons maintenant un autre exemple, présenté dans $this->volume = $volume;
le Listing 2, où nous manipulons cette fois un objet. $this->remplir($contenu);
Ici le résultat sera objet : 11, autre objet : 11, }
les deux variables $objet et $autre_objet référen-
cent en effet le même objet en mémoire. Il est possi- L’instanciation de la classe s’écrit alors : $unVerreEau
ble de créer un nouvel objet en remplaçant l’instruction = new Verre('classique', 0.33, 'eau');.
$autre_objet = $objet; par $autre_objet = clone Un objet est détruit lorsqu’il n’existe plus de variable
$objet;, on retrouve alors le comportement observé le référençant. Tout comme le constructeur, il existe une
en manipulant les types primitifs. Attention cependant, méthode qui peut être appelée lors de la destruction
$autre_objet n’est pas un alias de la variable $objet, d’un objet, elle s’appelle logiquement un destructeur,
comme il aurait été le cas avec cette assignation : elle porte le nom __destruct(). En PHP cette métho-
$autre_objet = &$objet. de n’est pas utilisée très souvent, elle peut être utili-
Observez cet exemple, pour être un peu plus clair : sée pour libérer des ressources : fermer une connexion
à la base de données ou un descripteur de fichier par
$a = 1; exemple.
$b = &$a;
$b = 2; Polymorphisme
echo $a; Un autre aspect essentiel de la programmation par ob-
jets est appelé polymorphisme. L’idée consiste à po-
Le résultat affiché est 2 : $b est $a sont la même varia- uvoir modifier un type pour obtenir une hiérarchie. Par
ble, mais portant un nom différent. Tandis que : exemple, on peut imaginer une classe Vaisselle, de
34 6/2010
POO avec PHP
laquelle découlerait notre classe Verre. Le but est de le constructeur parent avant d’effectuer les opérations
permettre une programmation plus générique, en réu- spécifiques à la classe fille. C’est le contraire pour
tilisant les mêmes méthodes pour plusieurs types. On les destructeurs : on appelle le destructeur parent une
dit alors qu’une classe hérite d’une classe parent. Vous fois que les ressources propres au fils sont détruites.
pouvez consulter la définition de la classe Vaisselle Cette pratique permet d’éviter les mauvaises surpri-
dans le Listing 3. ses si lors de futurs développements les constructeurs
Pour préciser que la classe Verre hérite de la classe et destructeurs parents sont modifiés.
Vaisselle, on utilise le mot clé extends lors de sa déc- Il est parfois nécessaire d’interdire la redéfinition
laration : class Verre extends Vaisselle. Vous po- d’une fonction. Pour cela, il existe le mot clé final
uvez alors utiliser les membres de la classe Vaisselle à placer avant la définition de la méthode. On peut par
directement en manipulant un objet Verre. exemple interdire la redéfinition de la méthode vider()
Cependant, un Verre est un type de vaisselle parti- qui n’a pas de raison de changer ainsi : public final
culier, il faut donc spécialiser la classe. On y ajoute l’at- function vider(). Il est également possible d’interdi-
tribut $volume et la méthode transvaser(). La classe re d’utiliser une classe pour l’héritage en la rendant elle
Verre sera donc : même final (final class MaClasse).
Il est par ailleurs possible d’effectuer plusieurs nive-
class Verre extends Vaisselle { aux d’héritage. Par exemple, Vaisselle peut être pa-
private $volume; rent de Verre, qui serait la classe mère de VerreAPied.
public function transvaser($autre) { Dans ce cas, utiliser parent::__construct() dans la
$this->remplir($autre->contenu); classe VerreAPied référera au constructeur de la clas-
$autre->vider(); se Verre. Si cependant vous souhaitez utiliser le con-
} structeur définit dans Vaisselle, utilisez la syntaxe :
} Vaisselle::__construct().
Il est temps d’introduire le troisième niveau de visi-
Le constructeur de la classe Verre, héritant directe- bilité, situé entre public (public) et privé (private). Le
ment de celui de la classe Vaisselle est cependant niveau protégé (protected) rend le membre de la clas-
incomplet : il est impossible de définir le volume de ce se invisible en dehors de celle-ci mais visible pour les
Verre. C’est donc l’occasion d’introduire la notion de classes héritant de ce membre. Dans certains cas, la
redéfinition : quand une classe fille modifie le com- classe mère est une classe qui ne doit pas être instanci-
portement d’une méthode de la classe mère. En PHP, ée. On parle alors de classe abstraite. Une classe abs-
redéfinir une fonction dans la classe fille se fait de la traite contient généralement une ou plusieurs méthodes
même manière qu’une définition normale. abstraites, ce qui signifie qu’elle n’ont pas d’implémen-
Notre classe Verre contiendra alors la méthode : tation. En clair, ces méthodes devront être redéfinies
dans une classe concrète héritant de cette classe abs-
public function _ _ construct($forme, $volume, traite. L’abstraction est utilisée quand deux types en-
$contenu = 'rien') {...} fants doivent proposer la même méthode mais ayant
un comportement différent. Pour indiquer qu’une clas-
Le constructeur de la classe Vaisselle n’est ce- se est abstraite, ont la définit ainsi : abstract class
pendant plus exécuté, il faut donc l’appeler explici- MaClasse, de même une méthode abstraite est décla-
tement dans le constructeur de Verre. Pour appeler rée ainsi : abstract public function maMethode();
cette méthode, nous avons besoin de deux nouvelles la méthode peut être publique, protégée ou privée, sa
notions : l’opérateur de résolution de portée :: (appelé déclaration est suivie d’un point-virgule, puisqu’elle ne
Paamayim Nekudotayim dans le folklore PHP, ce qui contient pas de corps.
signifie simplement double deux points) permet d’accé- Attention, une classe abstraite ne peut pas être fi-
der aux membres redéfinis par la classe fille ; d’autre nale puisque par définition, celle-ci doit être redéfinie.
part, le mot clé parent réfère à la classe mère la plus Sachez pour finir que bien que l’héritage à plusieurs
proche portant une définition de cette fonction. niveaux soit possible, l’héritage multiple n’est quand
à lui, pas permis dans PHP : une classe n’a qu’un pa-
public function _ _ construct($forme, $volume, rent direct.
$contenu = 'rien') {
parent:: _ _ construct($forme, $contenu); Les interfaces
$this->volume = $volume; Les interface sont, d’un point de vue purement techni-
} que, semblables à des classes abstraites dont la tota-
lité des méthodes seraient abstraites. Cependant, ces
Généralement, les constructeurs sont appelés dans deux notions se distinguent d’un point de vue séman-
l’ordre de la spécialisation, c’est à dire qu’on appelle tique : une interface sert en effet à définir la liste des
www.phpsolmag.org 35
Pratique
}
return self::$nbObjets; Membres statiques et constantes de classes
public function autresInstancesQueMoi() { Il est parfois nécessaire d’utiliser certains membres de
return self::$nbObjets-1; la classe sans créer d’instance de celle-ci. Ces mem-
}
} bres sont donc indépendants de toute instance de la
classe qui les contient. On dit de ces membres qu’ils
Listing 5. Les constantes __CLASS__ et __METHOD__
sont statiques. Un membre est déclaré statique à l’aide
class MaClasse { du mot clé static.
public static function test() {
echo 'classe : '. _ _ CLASS _ _ .', méthode : '. _ _ Un attribut statique s’appelle une variable de clas-
METHOD _ _ ; se, et sa valeur est commune à l’ensemble des objets
}
} créés à partir de la classe. Une variable de classe est
MaClasse::test(); // affiche classe : MaClasse, méthode généralement utilisée pour partager une donnée entre
: MaClasse::test
les différentes instances de celle-ci, les compter par
exemple. La manipulation des membres statiques est
présentée au Listing 4.
méthodes publiques qu’une classe devra implémenter. Nous avons vu ici l’opérateur de résolution de
Une interface ne contient donc aucune propriété et que portée utilisé de deux manières différentes, ma-
des méthodes publiques. is qui ont le même résultat : MaClasse::$nbObjets
Une interface permet de spécifier un ensemble de réfère à la variable $nbObjets de la classe MaClasse,
méthodes qui seront assurément implémentées dans self::$nbObjets, réfère à la variable $nbObjets de la
une classe, afin de garantir dans d’autres développe- classe courante : self est comparable à $this dans un
ments que ces méthodes pourront être utilisées en ay- contexte statique. Une méthode statique étant appelée
ant le même comportement même si elles n’ont pas le indépendamment d’une instance, le mot clé $this ne
même fonctionnement interne. peut être utilisé. Par ailleurs il est interdit d’accéder à un
On peut faire l’analogie suivante : la totalité des lec- membre statique depuis un objet, mais une méthode le
teurs ont une série de boutons : lecture, pause, stop peut : $objet->nbObjets n’existe pas, mais vous po-
avancer, reculer. Ces boutons constituent l’interface de uvez utiliser la valeur de MaClasse::$nbObjets dans
l’appareil, et bien qu’un lecteur de DVD, un lecteur de la méthode $objet->autresInstancesQueMoi().
CD ou un lecteur de MP3 n’aient rien de comparables
à l’intérieur, ils proposent ces mêmes boutons qui déc- Les outils fournis par PHP
lencheront le même comportement pour l’utilisateur. Pour développer vos applications en utilisant la POO,
Une interface est déclarée ainsi : PHP met à disposition un ensemble de fonctions, clas-
ses et mots clés. Ceux-ci permettent notamment d’e-
interface MonInterface { xplorer la structure d’une classe de déterminer la classe
public function maFonction(); dont est issu l’objet ou encore d’étendre les capacités
} de ce dernier.
Pour qu’une classe implémente une interface, on utilise Les constantes magiques
le mot clé implements : class LecteurMP3 implements PHP introduit deux constantes magiques utilisables dans
interfaceLecteur. Nous verrons plus tard un exemple le contexte d’une classe : la constante __CLASS__ cor-
concret classique d’utilisation des interfaces. Le méca- respond au nom de la classe courante et __METHOD__
nisme d’héritage existe aussi pour les interfaces, l’in- le nom de la méthode courante. Le Listing 5 présente un
terface interfaceLecteur peut hériter de interfaceA exemple de manipulation de ces constantes.
ppareilElectrique : interface interfaceLecteur
extends interfaceAppareilElectrique. La classe Le mot clé instanceof
implémentant interfaceLecteur comprendra alors PHP est un langage dit faiblement typé, une variable
les méthodes publiques de interfaceLecteur et int peut donc contenir n’importe quel type de donnée :
erfaceAppareilElectrique. Une classe peut par ail- un nombre, une chaîne de caractères ou encore un
leurs implémenter plusieurs interfaces, à condition que objet. Or, dans certains cas, il est nécessaire de véri-
celles-ci ne possèdent pas de méthodes communes fier que l’objet manipulé est bien d’un certain type,
(source de confusion), la liste des interfaces est sépa- c’est à dire que cet objet est bien une instance d’une
36 6/2010
POO avec PHP
classe donnée (ou d’une classe héritant de cette clas- Listing 6. Le clonage d’objet et la gestion de membres
se, ou implémentant cette interface). C’est le rôle du partagés
mot clé instanceof qui s’utilise comme un opérateur class Utilisateur { public $nom; }
de comparaison classique. Par exemple, pour vérifier class Message { public $auteur; }
$message = new Message();
que l’objet $unVerreEau est bien un Verre, on utilise- $message->auteur = new Utilisateur();
ra la syntaxe $unVerreEau instanceof Verre dans $message->auteur->nom = 'Paul';
$autre _ message = clone $message;
une condition. $autre _ message->auteur->nom = 'Pierre';
echo 'Auteur : '.$message->auteur->nom.', autre auteur
Les fonctions de manipulation d’objets : '.$autre _ message->auteur->nom;
www.phpsolmag.org 37
Pratique
Lorsqu’un objet est cloné, si cette méthode magique est class Utilisateur {
définie, alors le clone l’exécutera, ainsi, l’objet $auteur private $nom = 'Paul';
n’est plus le même dans les deux messages. public function _ _ toString() { return
Les méthodes __get() et __set() sont appelées $this->nom; }
lorsqu’une propriété n’existant pas ou n’étant pas vi- }
38 6/2010
POO avec PHP
$u = new Utilisateur();
echo 'Je suis '.$u; Lising 8. La sérialisation avec __sleep() et __wakeup()
Class MonObjet
{
affichera Je suis Paul. private $fichier;
private $adresse;
private $donnees;
Les interfaces et classes de la SPL public function _ _ construct($adresse) {
La SPL, pour Standard PHP Library, est à PHP ce que la $this->adresse = $adresse;
$this->fichier = fopen($adresse, 'r+');
SDL est aux langages C et C++ : une librairie de fonctions }
et classes fournies dans toute installation de PHP répon- public function lireLigne() {
if($this->fichier && !feof($this->fichier))
dant aux premiers besoins des développeurs. En utilisant $this->donnees .= fgets($this->fichier)."\n";
la SPL, vous aurez à disposition des structures de don- }
public function _ _ sleep() {
nées (liste chaînée, pile, queue...), des itérateurs, ou des fclose($this->fichier); // le descripteur de fichier ne
interfaces qui vous permettrons de jongler entre les dif- peut être conservé
return array('adresse', 'donnees');
férents types de structures de données standard de PHP. }
La documentation de la SPL est disponible dans public function _ _ wakeup() {
$this->fichier = fopen($this->adresse, 'r+'); //
un chapitre du manuel PHP : http://fr.php.net/manual/ réouverture du fichier
fr/book.spl.php, mais d’autres exceptions et interfaces fseek($this->fichier, strlen($this->donnees)); // on se
replace au même endroit dans le fichier
standards sont présentées sur les pages http://fr.php. }
net/manual/fr/reserved.exceptions.php et http://fr.php. public function _ _ destruct() {
fclose($this->fichier);
net/manual/fr/reserved.interfaces.php. }
Plutôt que de décrire sommairement les classes }
www.phpsolmag.org 39
Pratique
40 6/2010
POO avec PHP
sation telles que UML (Unified Modeling Language), qui public function getId() { return $this->id; }
offre des méthodes très concrètes pour concevoir une public function getNom() { return $this->nom; }
public function getEmployeur() { return $this-
application. Il est difficile de concevoir un logiciel sans >employeur; }
ces outils. }
La plupart des liens ont une direction et une cardinali- class Entreprise
té précisant combien d’objets participent à une relation. {
private $produits;
L’association entre deux objets la plus simple et co- private $employes;
urante est une association sémantique, qui précise le
public embaucher(Personne $p) {
sens du lien entre deux objets : ces liens représentent $this->employes[$p->getId()] = $p;
généralement des actions d’un objet sur un autre. Dans $p->setEmployeur($this);
}
votre code, ceci se traduit généralement par l’utilisation
d’une classe dans une autre. public licencier(Personne $p) {
unset($this->employes[$p->getId()]);
L’agrégation est un lien fort qui permet de montrer $p->setEmployeur(null); // Envoi d'un message
}
qu’un objet est une composante d’un autre, sans pour
autant lui appartenir. Les objets agrégés ont une raison public function creerProduit() {
$id = sizeof($this->produits)+1;
d’exister de manière indépendante, mais l’objet agrége- $p = new Produit($id);
ant peut en avoir besoin pour fonctionner correctement. $this->produits[$id] = $p;
return $p;
Par exemple, des objets Personne peuvent être agrégés }
par un objet Entreprise : l’entreprise fonctionne diffici-
public function arreterProduit(Produit $p) {
lement si personne n’y participe, pourtant, les personnes unset($this-produits[$p->getId()]);
y travaillant vivent même sans être dans l’entreprise. }
}
Dans votre code, votre classe Entreprise contien-
dra une propriété $employes qui sera un tableau de Per- class Produit
{
sonne (un tableau puisque dans notre cas plusieurs em- private $id;
ployés seront liées à l’entreprise). Les objets Personne
public function _ _ construct($id) {
seront créés en dehors de l’Entreprise, elle doit donc $this->id = $id;
proposer des méthodes publiques permettant d’embau- }
cher du personnel. Il est courant, pour permettre à l’ob- public function getId() { return $this->id; }
jet Personne de communiquer avec l’objet Entreprise }
www.phpsolmag.org 41
Pratique
42 6/2010
POO avec PHP
Bibliographie
MARTIN RICHARD
• Best Practices PHP5 (Guillaume Ponçon) aux éditions Ey-
L’auteur est étudiant en informatique et collabore à de nombreux
rolles – L’un des livres de référence en France sur le
développement de logiciels en PHP5, celui-ci complète projets d’applications pour le web ou de communication. Ses tra-
parfaitement l’excellent PHP5 avancé. vaux et activités sont résumées sur son site internet www.martiu-
sweb.net où il publie articles et cours sur ses découvertes.
www.phpsolmag.org 43
Pour les débutants
Manipuler
les sessions avec PHP
La gestion des niveaux de privilèges d’un internaute
dans un wiki ou un CMS et la réalisation d’un panier
de commande, sont deux exemples d’applications
rendues possibles par le mécanisme des sessions.
Dans cet article vous apprendrez à créer et manipuler
des sessions depuis un script PHP.
L
a gestion d’un panier de commande et la naviga- solution est la plus simple à mettre en place, la plus ef-
tion dans une application web à accès restreint ficace et la plus sûre.
gérant plusieurs niveaux de privilèges, ne peu- Dans un précédent numéro de ce même magazi-
vent fonctionner que si le serveur reconnaît l’internau- ne, vous avez appris le principe et la manipulation des
te lorsque celui-ci lui demande une URL. Les clients cookies depuis un script PHP. Dans cet article, vous
(navigateurs) et les serveurs web communiquent par n’aurez pas à générer vous même les cookies car PHP
le biais du protocole de transport HTTP (HyperText intègre en standard, depuis la version 4, un mécanisme
Transfer Protocol). Aucune information n’est conser- de session qui se charge de l’envoi automatique des
vée entre deux connexions. Lorsque le serveur reçoit cookies, du stockage des informations de session sur
une demande de ressource, les seules informations le serveur et de leur manipulation. Bien que le méca-
dont il dispose sont l’adresse IP qui a émis la requête, nisme des sessions soit très simple d’utilisation, il est
et la requête HTTP elle-même (ressource demandée, utile d’avoir des connaissances sur les cookies pour re-
informations sur le navigateur, et éventuellement don- définir les paramètres utilisés par défaut (durée de vie,
nées et méta-informations sur ces données). L’adresse chemin, transfert sécurisé) et comprendre le fonction-
IP ne permet pas d’identifier un utilisateur unique car nement des sessions.
plusieurs clients peuvent partager une même adresse Vous allez apprendre dans cet article à régler les
IP (proxy, translation d’adresse). De plus un ordinateur propriétés des sessions, à créer et restaurer une ses-
peut changer d’adresse IP entre deux visites à un si- sion, à manipuler des données dans des variables dont
te web, voire même au cours d’une même navigation la portée est celle des scripts de l’application, et à dé-
(DHCP). truire une session depuis un script PHP.
Le seul moyen pour un serveur de reconnaître un
internaute est que le navigateur transmette une infor- Régler les propriétés
mation dans la requête HTTP. L’information transmise Lors de la création d’une session, PHP génère un jeton
est un jeton de session, c’est-à-dire un identifiant uni- de session, c’est-à-dire un identifiant unique attribué
que qui permettra à l’application de reconnaître l’inter- et envoyé à un internaute. Le navigateur de l’internaute
naute pendant toute la durée de sa session. La ges- transmet ensuite ce jeton lors de chaque requête. C’est
tion de ce jeton de session peut être réalisée par divers ce qui permet de reconnaître un internaute et de placer
procédés : placer le jeton dans un paramètre de l’URL, dans le bon panier de commande les différents articles
transmettre le jeton par le biais d’un champ caché de commandés pendant toute la durée de la navigation.
formulaire HTML, ou en utilisant un cookie. La dernière Le suivi de session peut être réalisé en transmettant
44 6/2010
Sessions avec PHP
ce jeton par cookie, ou dans la partie querystring de Si le navigateur de l’internaute n’accepte pas les coo-
l’URL. kies, PHP ne peut donc pas placer un cookie de ses-
Le comportement des sessions dépend d’un en- sion chez le client. Il utilise alors automatiquement une
semble de directives du fichier de configuration PHP, session basée sur l’URL, à condition que la directive
présentées dans cette partie. Pour obtenir les valeurs session.use_trans_sid soit activée dans le fichier de
des directives PHP, vous pouvez directement consulter configuration php.ini. Pour des raisons de sécurité, il
la section [Session] du fichier php.ini si vous y avez est préférable de ne pas utiliser cette fonctionnalité, les
accès. Dans le cas contraire, exécutez le script PHP sessions ne devraient reposer que sur une transmission
<?php phpinfo(); ?>. La fonction phpinfo retourne par cookie. Il est conseillé de laisser cette directive dé-
des informations sur le support des sessions et indique sactivée (valeur 0) et de donner la valeur 1 à la directive
les valeurs des directives. Pour des raisons de sécu- session.use_only_cookies, qui indique à PHP de ne
rité cette fonction est souvent désactivée sur les ser- jamais accepter de jeton de session transmis dans la
veurs en production. Si vous n’avez accès ni au fichier partie querystring de l’URL. Un prochain article de ce
de configuration, ni à la fonction phpinfo, vous pouvez magazine expliquera en détail les réglages de sécurité
obtenir la valeur d’une directive en la passant en argu- des sessions.
ment à la fonction ini_get. Si vous n’avez pas accès au fichier de configuration
PHP, vous pouvez régler localement les valeurs des
Nom du jeton directives soit dans un fichier .htaccess si vous avez
Le nom du jeton de session par défaut est PHPSESSID, les droits nécessaires, soit avec la fonction ini_set.
il est défini dans la directive session.name du fichier de Cette fonction prend en premier argument le nom de
configuration PHP. La fonction session_name, appelée la directive à modifier (chaîne de caractères) et en se-
sans argument, retourne le nom du jeton pour la ses- cond argument la valeur à lui affecter. Dans ce cas il
sion courante. est recommandé de créer un fichier PHP contenant les
Il est possible de modifier le nom du jeton dans le fi- réglages des directives et démarrant la session et de
chier de configuration, ou en donnant le nom de jeton en l’inclure en première ligne de chaque script de l’appli-
argument à la fonction session_name. Dans le premier cation web.
cas, les jetons de toutes les applications web du serveur
prendront le nom placé dans la directive. Dans le se- Cookie de session
cond cas, la modification du nom de jeton est locale au La validité, le chemin, le domaine et la transmission
script. Il faudra donc appeler la fonction session_name sécurisée ou non du cookie de session sont définis
dans tous les scripts de l’application web, avant de dé- dans le fichier de configuration php.ini. Ces proprié-
marrer la session. tés ont été décrites dans l’article intitulé Manipuler les
cookies avec PHP du numéro 4/2010 de PHPSolu-
Valeur du jeton tions, pour plus de détails veuillez vous référer à cet
La valeur du jeton de session est une chaîne de ca- article disponible en ligne : http://phpsolmag.org/fr/ma-
ractères générée aléatoirement par PHP, par exemple : gazine/1068-ajax-avec-jquery-et-zend-framework. La
eh26jtuab7g1fsu1mthi1gbs55. La fonction session_ directive session.cookie_lifetime fixe la durée de
id, appelée sans argument, retourne la valeur du jeton validité du cookie, elle a la valeur 0 par défaut. Les
pour la session courante. directives session.cookie_domain et session.coo-
La valeur du jeton de session peut être modifiée en kie_path précisent respectivement le domaine (vide
passant en paramètre la valeur souhaitée à la fonc- par défaut) et le chemin de validité du cookie (/ par
tion session_id. Cette fonction doit être appelée avant défaut). Enfin la directive session.cookie_secure in-
l’ouverture de la session, dans chaque script de l’appli- dique si le cookie doit être transmis uniquement lors-
cation web. Il est cependant fortement déconseillé pour que la communication est cryptée (0 par défaut). Par
des raisons de sécurité de modifier la valeur du jeton. défaut le cookie est donc valable sur tout le domaine
et pour tous les scripts du serveur, il est détruit lors-
Transmission du jeton que l’internaute quitte le navigateur, et est transmis
Le moyen de transmission de l’identifiant de session est par HTTP ou HTTPS.
dépendant des valeurs de directives du fichier php.ini. Ces propriétés peuvent être modifiées dans le fi-
Lorsque la directive session.use_cookies a la valeur 1 chier php.ini ou directement dans un script PHP en utili-
(valeur par défaut), l’application web transmet le jeton sant la fonction session_set_cookie_params. Dans le
de session dans un cookie. Le cookie placé sur le dis- premier cas elles seront appliquées à toutes les appli-
que dur du client a pour nom PHPSESSID et pour valeur cations web du serveur qui reposent sur les sessions.
l’identifiant de session, par exemple : Dans le second cas, seul le cookie de session de l’ap-
plication courante sera concerné. La fonction session_
PHPDESSID= eh26jtuab7g1fsu1mthi1gbs55. set_cookie_params prend en arguments la durée de
www.phpsolmag.org 45
Pour les débutants
46 6/2010
Sessions avec PHP
Dans l’exemple ci-avant, l’identifiant de session a la L’exécution de ce code produit le résultat suivant pour
valeur eh26jtuab7g1fsu1mthi1gbs55, le fichier de l’exemple pris dans la section précédente :
session, stocké dans le répertoire /tmp, est donc nom-
mé sess_eh26jtuab7g1fsu1mthi1gbs55. Ce fichier Array (
contient les noms des variables de session et leurs quantite => 8,
valeurs, ces informations sont sérialisées avant d’être ref => A-06-18
stockées, c’est-à-dire que des méta-informations sont )
ajoutées (type et taille des données). Par exemple, le
fichier de session de l’exemple du Listing 2 contient les Modifier les données
données suivantes : La modification d’une variable de session est effectuée
simplement en affectant une nouvelle valeur à la clé
quantite|i:8;ref|s:7:"A-06-18"; correspondante dans le tableau $_SESSION. Cette opé-
ration doit être réalisée après avoir restauré la session
Les données de session sont stockées dans le fichier avec la fonction session_start.
sous la forme nom_variable|type:valeur;. Le type Lorsque le script memoriser_var.php du Listing 2
de la variable de session est représenté par un caractè- est exécuté une seconde fois avec nb=12 dans la chaî-
re : s = string, b = boolean, i = int, a = array. Lorsque le ne de requête de l’URL, le script affecte un nouveau
type est une chaîne de caractères ou un tableau, il est contenu à la variable quantite (la valeur 8 est rem-
de la forme caractere_type:taille. La taille indique placée par la valeur 12), et affecte à nouveau la valeur
le nombre de caractères dans la chaîne, ou le nombre A-06-18 à la variable ref.
de cases du tableau. Dans cet exemple, deux variables
de session sont stockées, quantite et ref. La variable Supprimer une variable de session
de session quantite est de type entier (i) et a la va- Pour supprimer une variable de session il faut utiliser la
leur 8. La variable ref est une chaîne de caractères (s), fonction unset. Celle-ci prend en paramètre la variable
de 7 caractères, dont la valeur est la chaîne indiquée à supprimer. L’instruction ci-après supprime la variable
entre guillemets (A-06-18). ref du tableau $_SESSION :
www.phpsolmag.org 47
Pour les débutants
48 6/2010
Sessions avec PHP
www.phpsolmag.org 49
Pour les débutants
50 6/2010