Vous êtes sur la page 1sur 50

9/2010 2

Extension ZIP pour PHP


9/2010 3
Extension ZIP pour PHP
2
TABLE DES MATIRES
5/2011
2 5/2011
Le priodique phpsolutions est publi par
Software Press Sp. z o.o. SK
Bokserska 1, 02-682 Varsovie, Pologne
Tl. 0975180358, Fax. +48 22 244 24 59
www.phpsolmag.org
Prsident de Software Press Sp. z o.o. SK :
Pawe Marciniak
Directrice de la publication :
Justyna Ksiek
Dpt lgal :
parution
ISSN : 1731-4593
Rdacteur en chef :
ukasz Bartoszewicz
Couverture :
Przemysaw Banasiewicz
DTP :
Przemysaw Banasiewicz
przemyslaw.banasiewicz@software.com.pl
Composition :
Przemysaw Banasiewicz
Correction :
Valrie Viel, Thierry Borel, Barbara Bourdelles
Bta-testeurs :
Brice Favre, Valrie Viel, Cyril David,
Christophe Milhau, Alain Ribault, Stphane Guedon,
Eric Boulet, Mickael Puyfages, Christian Hernoux,
Isabelle Lupi, Antoine Beluze, Timote Neullas,
Yann Faure, Adrien Mogenet, Jean-Franois Montgaillard,
Turmeau Nicolas, Jonathan Marois, Wilfried Ceron,
Wajih Letaief, Franois Van de Weerdt, Eric Vincent,
Franck Michal Assi, Francis Hulin-Hubard,
Nicolas Dumas, David Michaud.
Les personnes intresses par la coopration
sont pries de nous contacter :
editor@phpsolmag.org
Publicit :
publicite@software.com.pl
Pour crer les diagrammes on a utilis le programme
AVERTISSEMENT
Les techniques prsentes dans les articles
ne peuvent tre utilises quau sein des rseaux
internes. La rdaction du magazine nest pas
responsable de lutilisation incorrecte des techniques
prsentes. Lutilisation des techniques prsentes peut
VARIA
6 Actualits
Actualits du monde du dveloppement.
Christophe Villeneuve
8 Interview de Franois-Xavier Bois
Franois-Xavier Bois, Directeur associ de Kernix So-
ftware
10 Interview de Florent Sabourin
Florent Sabourin, Responsable de loffre e-commerce
chez Smile
OUTILS
12 Les solutions Cloud lusage dIkoula
Jules-Henri Gavetti
Ikoula, hbergeur informatique depuis 1998, est le le-
ader du Cloud Computing en France. Avec plus de 8
000 machines virtuelles en production et plusieurs an-
nes dexprience dans la virtualisation, Ikoula dve-
loppe des solutions de Public et de Private Cloud,
comme la VM 1 et Hosted Exchange 2010, via un
panneau de contrle administr en toute libert par le
client...
PROJETS
14 DOMPDF : crez des PDF la vole partir
de HTML
Yohann Poiron
DOMPDF est une bibliothque crite en PHP qui per-
met de gnrer des documents PDF partir de pages
web au format HTML, mises en formes avec des feuil-
les de style CSS. Le respect des standards est le ma-
tre-mot de cet outil, qui volue vers sa version 0.6. Le
projet, trs actif et hberg sur Google Code est main-
tenu par des passionns du web et des standards ac-
tuels.
Table des matires Table des matires
DOSSIER
20 Mise en uvre de XAMPP
Olivier Heurtel
XAMPP est un kit dinstallation qui inclut entre autres
Apache, PHP et MySQL, et qui permet de mettre en
place trs rapidement un environnement de dveloppe-
ment Web. Dans cet article, vous apprendrez comment
installer et administrer XAMPP pour Linux, mais aussi
comment dvelopper et dployer une petite application
de test utilisant une base de donnes MySQL.
PRATIQUE
30 SQL : les vues
Cilia Mauro, Magali Contensin
Savoir manipuler les vues permet de limiter laccs un
sous-ensemble de donnes pour une catgorie dutili-
sateurs, de simplifier linterrogation de la base et dtre
indpendant du schma relationnel en cas de modifica-
tion de ce dernier.
35 Crer son site internet avec le CMS eZ
Publish
Jean-Luc Nguyen
Crer un site internet, quil soit titre personnel ou pro-
fessionnel, peut passer par le choix dun CMS plutt
quun Framework. Que ce soit un blog sur un musicien
quon apprcie, un portail institutionnel ou un site de
vente de T-shirts en ligne, il est ncessaire de connatre
les forces et faiblesses des CMS pour voir un jour son
site internet en ligne sans problme. Dans ce cas, cho-
isir EZ Publish peut tre un choix judicieux.
SCURIT
46 PF et OpenBSD adapt aux PME
Beaucoup de PME ont en commun des besoins de
scurit et notamment en matire de pare-feu. Il exi-
ste de nombreux choix matriels sur le march et les
UTM ont depuis plusieurs annes inond le march de
la scurit internet. Dans cette multitude de choix, il exi-
ste des outils Open Source en licence libre qui peuvent
parfaitement convenir aux PME, couvrir 100% de leurs
besoins, tout en tant simples configurer.
5/2011
6
Actualits
Sismo
Le projet sismo est un serveur de tests en continu, crit en Fabien Poten-
cier (crateur du framework symfony) en PHP et ncessite une version PHP
5.3.3 minimum, pour vous permettre deffectuer des tests. Par ailleurs, il a
t optimis pour fonctionner aussi bien sur un serveur local, que sur un
serveur distant.
Son but consiste
e vous aider dans
la livraison de pa-
quets de dvelop-
pement et sera un
outil complmen-
taire votre se-
rveur dintgration
continue. Lors de
son utilisation, vo-
us pourrez las-
socier tous vos
COMITs. La confi-
guration ncessite juste de mettre le fichier dans le bon dossier de votre
projet et il soccupera deffectuer le reste. Linterface web qui vous est pro-
pose, vous sera utile, si vous le souhaitez, lors de son installation et de
son utilisation.
Le site officiel du projet propose un tutoriel et un exemple dutilisation pour
vous faciliter lutilisation http://sismo-project.org/
Technologies utilises
Lors de la navigation, vous pouvez vous retrouver devant un site web qui vo-
us impressionne. Un des premiers rflexes consistent regarder et analyser
les diffrentes pages par lintermdiaire des fichiers sources. Mais souvent la
technologie ou le langage utilis nest pas toujours vident dtecter.
Wappalyzer est une extension compatible avec les navigateurs Mozilla
Firefox et Google Chrome. Grce celle-ci, vous allez reprer facilement
diffrents critres :
LetypedeCMSutilis,leswebsframeworksouJS,lesvidoplayers,
des widgets, etc
Des logiciels applicatifs ou la prsence dapplications extrieures ou
webs services
Bien sr, vous pourrez aussi connatre dautres secteurs comme le e-commer-
ce, le type de javascript, les outils danalyses, les bases de donnes et beau-
coup dautres informations utiles. Lensemble du rsultat est disponible directe-
ment dans votre navigateur et ainsi vous vitez des oprations manuelles.
http://wappalyzer.com/
Rdaction des actualits :
Christophe Villeneuve
Tour PHP 2011
LAFUP (Association franaise des
Utilisateurs de PHP) ont annonc le
premier Tour PHP 2011 Euratech-
nologie de Lille le 24 et 25 novembre
2011. A cette occasion, un appel
confrencier a t lanc avec comme
thmatique principale : le commerce
en ligne, lintgration dapplications
htrognes au sein des systmes
dinformations, lchelle du web.
http://afup.org/pages/phptourlille2011/
Nginx 1.0
Nginx est un serveur HTTP libre, open
source et haute performance, dont
la version 1.0 vient de sortir aprs de
nombreuses annes de dveloppe-
ments. Il permet de faire tourner de
nombreux langage comme PHP. Cer-
taines plateformes lutilisent comme
Wordpress, Github. Enfn, Nginx est
class en 3eme position au niveau des
baromtre serveur.
http://nginx.org/
Phrozn
Phrozn est un projet PHP, dont le but
est de vous permettre de gnrer un
site statique en PHP. Il ofre de nom-
breuses possibilits pour lintgrer
dans les moteurs de template comme
Smarty, tout en gardant la main sur
les fchier CSS, JS, HTML.
http://www.phrozn.info/en/
PHPMyCom 2.0
MyPhpCom est une application ra-
lise en PHP, MySQL et Ajax. Il sagit
dun systme de gestion de commen-
taires. Cette version se veut la plus
simple possible pour vous permettre
de linstaller facilement dans votre
projet web. Elle propose un captcha,
un systme de pagination, les URLs
cliquables...
http://www.phpcs.com/codes/MYPHP-
COM-SYSTEME-COMMENTAIRE-PHP-
MYSQL_52995.aspx
Dolibarr 3.0
La nouvelle version ERP/CRM Doli-
barr, vient de sortir. Elle apporte de
nombreuses volutions et nouveau-
ts comme lamlioration de la slec-
tion des plugins, de linstallation, de
lutilisation, et de la programmation.
Par ailleurs, lorganisation des lignes a
t modife et de nouveaux modules
sont disponibles.
http://www.dolibarr.org/
o
p
e
n
s
o
u
r
c
e
w
w
w.sm
ile.fr
Paris Lyon Nantes Bordeaux Montpellier Aix Barcelone Kiev Genve Casablanca Amsterdam

l
u

P
a
r
t
e
n
a
i
r
e

e
urop

e
n

d
e

l
'
a
n
n

l
u

P
a
r
t
e
n
a
i
r
e

e
urop

e
n

d
e

l
'
a
n
n

e
Spcialiste reconnu !
Spcialiste reconnu !
Premier intgrateur europen
de solutions open source
Smile recrute 200 personnes en 2011.
Passionns des technologies du web
et de lopen source ?
Smile c'est aujourd'hui 500 collaborateurs,
11 agences et 18 domaines d'expertise.
Rejoignez nous !
5/2011 8
Interview
PHP Solutions : Bonjour, pourriez-vous nous dire quelques mots
sur vous et votre entreprise ?
Franois-Xavier Bois : Je me prsente, Franois-Xavier Bois, ingnieur en
Sciences Cognitives et Intelligence Artificielle, dirigeant et co-fondateur de
Kernix, socit que jai cre avec mon associ, Fabrice Mtayer, il y a 10 ans
alors que nous tions tous 2 en dernire anne lEPITA.
Notre structure compte aujourdhui une trentaine de collaborateurs tous sp-
cialistes dans leur domaine. Notre parti pris a toujours t de maitriser 100%
nos ralisations en ne faisant appel ni au offshore ni des profils indpen-
dants. Nous disposons ainsi dune structure taille humaine solide en mesure
de sattaquer tout projet web quelle que soit sa dimension et sa complexit.
Alors que mon associ assure les directions financire et commerciale, je
suis pour ma part responsable de la division R&D et ai obtenu que Kernix
soit agre Centre de Recherche par le Ministre de la Recherche. Au sein
de ce ple je suis larchitecte principal du framework web KWO (Kernix Web
Object) que nous enrichissons un rythme soutenu depuis la naissance de
Kernix.
Passionn par le web et son cosystme, jai eu loccasion dcrire 6 ou-
vrages consacrs au PHP et MySQL. Le dernier en date, publi chez Ey-
rolles en dcembre 2010, est consacr WordPress3.
PS : Quels sont aujourdhui les services que Kernix proposent ses
clients ?
FXB : Le cur de notre activit est le dveloppement dapplications web sur-
mesure. Disposer de notre framework nous permet de coller au plus prs des
besoins de nos clients tout en assurant des dlais de ralisation les plus com-
pacts possibles. Notre intervention ne se limite cependant pas au dveloppe-
ment ; nous accompagnons le client durant toute la phase dexploitation de son
site en incluant dans notre offre lhbergement, le rfrencement et la mainte-
nance. Nous disposons galement dun studio de cra en interne et sommes
ainsi en mesure de proposer le design du site.
PS : Pourriez-vous raconter nos lecteurs sur quels projets vous
tes en train de travailler ?
FXB : Kernix intervient en ce moment sur trois typologies dapplications web :
des rseaux sociaux, des moteurs de recherche, lis golocalisation et aux
Google Maps, et des boutiques e-commerce. Laurat en 2009 de lappel
projet WEB2.0 organis par le Secrtariat dEtat charg de la prospective et
du dveloppement de lconomie numrique, Kernix est galement en train
de raliser un portail rfrenant tous les lieux disposant dinstallations acces-
Interview
de Franois-Xavier Bois, Directeur
associ de Kernix Software
Franois-Xavier Bois
Directeur associ de Kernix
Sof t ware
Interview
phpsolmag.org/fr 9
norme interne dindentation soit respecte (il y a des
sujets avec lesquels on ne rigole vraiment pas !). La
majorit des dveloppeurs, aficionados de Linux, uti-
lise des terminaux et emacs. Nous trouvons cepen-
dant dautres IDE ou diteurs tels que Dreamweaver
CS5, IntelliJ, Zend Development Environment ou No-
tepad++. Kernix na pas rsist au tsunami Apple et
les premiers OSX commencent faire leur apparition
dans lopenspace.
PS : Quels sont les projets venir de Kernix ?
FXB : En modifiant notre baseline de web application
provider digital factory nous marquons le fait que
Kernix est plus quune agence web. Nous disposons
depuis prs dun an dun ple dveloppement mobile
qui conoit des applications iPhone et Android. Notre
discours vis--vis de nos clients est maintenant le
suivant : Kernix conoit des solutions digitales com-
pltes qui incluent le gestionnaire central de donnes
(le backoffice) ainsi que les diffrentes applications
de consultation que ce soit pour le web, le mobile ou
les tablettes. Lide est une nouvelle fois de simplifier
la vie du client en facilitant la gestion de donnes tout
en faisant en sorte que ces dernires soient diffuses
de la manire la plus large possible.
Le support de lHTML5 par tous les navigateurs
rcents est une opportunit magnifique de proposer
des interfaces plus ergonomiques nos utilisateurs.
Nous sommes ce titre en train de finaliser la refonte
complte de notre backoffice autour de cette techno-
logie.
PS : Quelles sont vos perspectives de
recrutement cette anne ?
FXB : La croissance de Kernix sest particulirement
acclre ces deux dernires annes. Nous sommes
en permanence la recherche de profils pointus dans
le domaine du dveloppement web et mobile. La mai-
trise de la programmation objet est essentielle. Une
bonne connaissance du JavaScript est clairement un
atout et le sera de plus en plus avec la monte en puis-
sance de lHTML5.
Chefs de projets et ingnieurs avant-vente sont ga-
lement des profils pour lesquels nous sommes en re-
cherche active.
Je profite galement de cette tribune pour indiquer
que nous sommes la recherche dun profil de type
chercheur (postdoc) dans le domaine du datamining.
PS : Merci beaucoup pour le temps que vous
avez bien voulu nous accorder.
FXB : Merci PHP Solutions que jai le plaisir de lire
tous les mois et longue vie au PHP !
sibles aux handicaps en France. La base de donnes
quexploitera ce site sera ouverte et accessible via des
webservices.
PS : Comment vous diffrenciez-vous ?
FXB : En ralisant des sites et applications web depuis
plus de 10 ans, Kernix a trs vite pu dtecter les v-
ritables enjeux pour les sites web professionnels. Les
notions de robustesse, de scurit et dvolutivit sont
au cur de nos dveloppements. Un dveloppeur ne
conoit pas de la mme faon une interface qui liste
quelques centaines dlments ou plusieurs dizaines
de millions. De la mme manire, un site disponible
dans une seule langue ne pourra tre conu comme
un site multilingue. Kernix dispose dsormais dune
longue exprience dans la conception de sites critiques
et complexes. Nos clients, dont lactivit repose de plus
en plus souvent 100% sur nos outils, peuvent comp-
ter sur nous et faire appel tout moment nos quipes
pour faire voluer lapplicatif ou linfrastructure.
PS : Quel est selon vous lavenir de PHP dans le
monde web ?
FXB : Les qualits qui ont fait la force de PHP sont
toujours prsentes aujourdhui, quil sagisse de lex-
trme simplicit du langage, de sa rapidit dexcu-
tion, de sa stabilit ou de sa scurit intrinsque. Le
tour de force est dtre parvenu les maintenir tout en
enrichissant le langage de fonctionnalits avances
telles que le Late State Binding, les closuresou les na-
mespaces. Ces fonctionnalits permettent de conce-
voir des frameworks web (Zend, KWO, Symphony) de
haut niveau qui sont dsormais la base de tout projet
web denvergure.
PS : Aucun regret ?
FXB : Le manque de visibilit sur les volutions et
lavenir du langage moyen et long terme est ma prin-
cipale inquitude vis--vis de PHP. Quelle solution va
tre propose pour une gestion srieusede lunicode ?
Quid de PDO qui devait tre au cur de tous les dve-
loppements lis aux bases de donnes ? Quand pou-
vons-nous esprer voir le compilateur dopcode APC
faire son entre dans le tronc commun des sources ?
Lessentiel de lnergie des dveloppeurs semble d-
sormais tre consacr aux frameworks et autres ou-
tils utilisateurs. Bien que cela ne soit pas prjudiciable
pour linstant, je pense quil est important de rester vi-
gilant et de ne pas se reposer trop longtemps sur ses
lauriers.
PS : Pourriez-vous raconter nos lecteurs quels
outils de dveloppement vous utilisez ?
FXB : Chez Kernix, les dveloppeurs sont libres duti-
liser les outils quils souhaitent du moment que la
5/2011 10
Interview
PHP Solutions : Quels sont les lments cls prendre en compte pour
raliser un bon site e-commerce ?
Florent Sabourin : Se lancer dans le-commerce cest un peu comme ouvrir
un magasin, il faut tudier le march, avoir des bons produits et les commer-
cialiser auprs des clients. On peut regrouper tous ces aspects sous le terme
stratgie e-business, et nous pouvons assister nos clients dans ce sens
pour laborer leur stratgie, produire un cahier des charges.
Une fois que les ides sont claires, vient le temps de la construction : imaginer
le rayonnage, le placement des produits, les ttes de gondoles, les couleurs de
lenseigne... Sur le web nous avons des ergonomes, des graphistes et des consul-
tants qui mettent en place ce merchandising et le valident par des tests utilisateurs.
Nos ingnieurs intgrent les crans et fonctionnalits imagines, mettent en
place des outils comme Magento qui permettront au marchand danimer le
catalogue, faire des promotions, grer les ventes, la logistique, le paiement
en ligne, le SAV... et bien entendu, connectent la plateforme Web au systme
dinformation en place (ERP, CRM). Nous intervenons galement pour former
les utilisateurs, ou les dveloppeurs la plateforme ainsi construite.
Malgr tout, la russite dun commerce en ligne nest pas uniquement lie
sa bonne conception : il faut des clients, et des clients contents. Nos consul-
tants en e-marketing appuys par nos partenaires travaillent sur la mdiatisa-
tion du site (affiliation, rfrencement, rseaux sociaux) et proposent des solu-
tions pour amliorer la dimension sociale du shopping.
Challenge russi : vous avez des milliers ou millions de visiteurs...
En pleine priode de soldes, il faut aussi tre certain que la quantit de clients attirs
ne trouble pas la bonne marche de la boutique (on voit souvent aux JT des clients
jouer des coudes pour rentrer le premier). Sur le web, le phnomne nest pas vi-
sible mais la problmatique reste la mme : il faut absorber ce trafic. Notre ple h-
bergement, surveillance et exploitation maitrise particulirement bien ce sujet.
Vient le temps de lanalyse, du pilotage : si les outils danalyse sont excel-
lents pour mesurer le comportement des internautes, nous proposons ga-
lement de les coupler avec des solutions de Business Intelligence qui offrent
une grande libert dans lanalyse des donnes, des clients, des ventes, de la
qualit de service... Et cela dans un but unique : amliorer en permanence la
performance commerciale de la e-boutique.
En synthse nous aidons nos clients lancer leur activit, mettre en place
leur boutique, se faire connaitre et piloter ce canal de vente en vogue.
PS : Pourquoi avoir fait le choix de lOpen Source?
FS : Les solutions open source, lorsquelles sont matures (et cest le cas pour
le e-commerce) offrent un trs grand nombre davantages pour nos clients. On
Interview
de Florent Sabourin, Responsable
de loffre e-commerce chez Smile
Florent Sabourin
Responsabl e de lof fre
e-commerce chez Smil e
Contact :
Smile
48 rue de Villiers
92300 Levallois-Perret
Tl. 01 41 40 11 00
Interview
phpsolmag.org/fr 11
Prestashop avec ses dernires versions devient une
alternative trs srieuse, nous suivons ce produit de
prs depuis 2008 et commenons lintgrer.
Dautres solutions comme RBSChange ou encore Dru-
pal Commerce - sur lesquelles nous comptons lavenir
- sont suivies par notre quipe de veille technologique.
Pour en savoir plus vous pouvez tlcharger gratuite-
ment notre livre blanc sur le sujet sur www.smile.fr.
PS : Comment expliquez-vous le succs de ces deux
solutions?
FS : Les deux solutions sont sorties peu prs la
mme poque (premier semestre 2008) et ont combl
un vide dans loffre open source laiss par un OsCom-
merce techniquement en dclin et la communaut d-
chire entre un nombre incalculable de forks.
Magento, lors de sa sortie a bnfici dun buzz ab-
solument incroyable sans grands efforts de la part de
Varien (diteur de Magento). La qualit intrinsque de
loutil, tant sur le plan ergonomique, technique et fonc-
tionnel a permis Magento de dcoller instantanment
et dinstaller en un temps record une base dutilisateurs
suffisante pour attirer lattention de socits plus impor-
tantes. En France, cest Discounteo qui a franchit le pas
en premier, ouvrant la voie de nombreuses autres
grandes implmentations.
Prestashop a mis un peu plus de temps dmarrer.
La solution est sortie lgrement aprs Magento et a
longtemps souffert dune image plus amateur ct de
son an amricain. Mais lditeur franais dploy
des efforts colossaux pour mettre niveau sa solution
et bnficie aujourdhui dune incroyable base de bou-
tiques installes dans le monde. Sil fallait dsigner un
vrai successeur OsCommerce, cest bien Prestas-
hop !
PS : Quelles sont les perspectives pour lanne 2011
sur le march de le-commerce et pour Smile en
particulier ?
FS : Smile travaille dores et dj la construction et
la refonte de e-boutiques pour des marques ou des
distributeurs qui verront le jour dici les prochains mois.
Nous pensons que le march du m-commerce, via
les smartphones, va continuer de crotre et prendre
une place importante dans les usages dInternet. Nos
quipes travaillent sur le dveloppement dapplica-
tions mobiles et de sites mobiles pour accompagner les
clients de nos clients.
Comme jai pu en parler prcdemment, le Social
Shopping est clairement un axe de dveloppement fort
pour nos clients, notamment les marques. Larrive de
la Freebox 6 baptise Rvolution et lamlioration glo-
bale des boitiers TV rendent actif le consommateur et
laisse penser que le T-commerce va tre un concept
exploiter dans quelques annes.
parle souvent du prix qui est bien videmment un critre
de choix important. Mais sil est vrai quune solution open
source est trs souvent moins couteuse quune solution
propritaire, ce nest pas pour nous lunique argument
retenir.
Le monde du e-commerce va vite, trs vite. Des nou-
veauts, il en sort tous les jours et les e-commerants
doivent se maintenir la page pour rester concurren-
tiels. Prenons par exemple Google Shopping qui est ar-
riv en France cette anne. Les premiers outils avoir
offert des fonctions dexport natives vers le moteur de
Google taient des solutions open source (Magento no-
tamment). Et ce, grce la ractivit et la taille de
la communaut entourant loutil. Pas question, sur ce
genre de fonctionnalits valorisant les primo-entrants,
dattendre quun diteur intgre cette fonctionnalit sa
roadmap et la publie deux, trois voire six mois plus tard !
Vient ensuite la question de la prennit. Lmergence
de solutions open source portes par des diteurs (des
socits but lucratif donc) permettent aujourdhui aux
socits les plus rticentes de trouver un modle alter-
natif combinant le meilleur des deux mondes : louver-
ture et le support communautaire dun ct et la pr-
sence de forces de production ddies maintenir et
faire voluer loutil de lautre.
PS : Quelles sont les principales rfrences clients de
loffre e-commerce Smile, les grands projets mens
rcemment ?
FS : En 2009, nous avons mis en ligne le site mar-
chand du Furet du Nord (www.furet.com), une des plus
grandes librairies dEurope base dans le nord de la
France. Cette boutique en ligne runit plus de 1 400 000
rfrences et reste encore aujourdhui le plus gros ca-
talogue jamais mis en ligne sous Magento. Ctait un
challenge technique passionnant !
Nous avons galement accompagn dans la refonte
de son site e-commerce le multi-spcialiste de lquipe-
ment public camif-collectivites.fr.
Fin 2010, nous avons mis en ligne le site des grandes
marques comme La Halle, Minelli, le clbre libraire Gi-
bert Joseph ou encore le savoyard SnowLeader.com
(matriels, vtements et chaussures lifestyle).
Dbut 2011 nous sommes fiers davoir mis en ligne
le premier site marchand dun rseau dopticiens : Krys
(www.krys.com). Nous venons galement de sortir le
nouveau site de la marque de lingerie Darjeeling (www.
darjeeling.com). Beaucoup dautres beaux projets sont
venir en 2011.
PS : Quels outils prconisez-vous ?
FS : Magento est le leader incontest sur le march des
solutions e-commerce open source. Nous avons un ex-
cellent ple de comptence sur ce produit et ralisons
la plupart de nos sites avec cette solution.
5/2011 12
Outils
Les solutions Cloud lusage dIkoula

Ikoula, hbergeur informatique depuis 1998, est le leader du Cloud Computing en France. Avec plus
de 8 000 machines virtuelles en production et plusieurs annes d'exprience dans la virtualisation,
Ikoula dveloppe des solutions de Public et de Private Cloud, comme la VM 1 et Hosted Exchange
2010, via un panneau de contrle administr en toute libert par le client...

La VM 1, un serveur ddi virtuel 100% flexible

La VM 1 a t conue pour apporter aux utilisateurs un
maximum de flexibilit et dlasticit dans la consommation de
leurs ressources.

Elle inclut une franchise 1 comprenant :
o 512 Mo de RAM
o CPU
o 40 Go despace disque
o 240 Go de donnes entre/sortie
o 128 Kb/s de bande passante entrante et 512Kb/s de bande
passante sortante

Ce sont ces mmes indicateurs qui sont ensuite facturs selon leur surconsommation ; chacun
possdant son propre prix.

La VM 1 : comment a marche ?

Avant de souscrire la prestation, lutilisateur a la possibilit destimer ces cots de consommation
mensuels via une calculatrice conue spcialement pour cet usage (disponible sur
http://express.ikoula.com/vm).

Lors de sa souscription, lutilisateur dfinit un plafond maximum de consommation pour deux
indicateurs : la RAM (disponible en 512 Mo, 758 Mo, 1024 Mo ou 2048 Mo) et le disque dur (100 ou
200 Go). Si ces quantits sont dpasses dans le mois, la VM sajuste automatiquement delle-mme,
aucune manipulation nest ncessaire.

Lutilisateur choisit ensuite son systme dexploitation parmi les dernires versions disponibles sous
Windows : Web Edition 2008 R2, Standard Edition 2008 R2, Data Center Edition 2008 R2, Enterprise
Edition 2008 R2 Le cot des licences nest pas factur !

La VM est disponible en quelques minutes ! Lutilisateur a la possibilit de consulter ces en-cours de
consommation en temps rel via une interface conue spcialement pour les offres Cloud Computing
dIkoula.

La VM 1 : pour quel type dutilisation ?

La VM 1 est idale pour des oprations ponctuelles du type vnementiel, calculs intensifs,
oprations marketing, web, jeux Elle peut s'largir sur la priode correspondante et retrouver une
taille plus "standard" son chance. Elle est donc totalement flexible et modulable.


phpsolmag.org/fr 13
Les solutions Cloud lusage dIkoula
Exchange 2010, la solution de messagerie pour les revendeurs

Loffre Hosted Exchange 2010 dIkoula connat une double
particularit : la possibilit de revendre la solution en marque
blanche et de se constituer des comptes sur-mesure.

Avec la plate-forme EX10, vous tes le seul matre bord

Pour permettre ses clients de devenir eux-mmes revendeurs de la solution, Ikoula a dvelopp une
interface de gestion facile dutilisation et intuitive, travers laquelle il est possible de grer et de
paramtrer lensemble des fonctionnalits proposes par Exchange 2010.

Ainsi, cration de comptes de messageries, dutilisateurs, partage dagendas, de calendriers, accs
webmail sont sous le contrle du revendeur, qui a une utilisation illimite des fonctionnalits selon
le pack choisi chez lhbergeur.

Crez vos comptes sur-mesure

Ikoula propose deux packs ayant chacun des fonctionnalits plus ou moins avances ; lutilisateur
pouvant changer de pack comme il le souhaite ou payer uniquement les ressources dont il a besoin
en supplment (espace de stockage et synchronisation mobile).

: pour profiter des fonctions standards dExchange (POP, IMAP, partage des ressources) Le Pack Pro
tout en ayant la possibilit de souscrire des options payantes comme MAPI ou la synchronisation
mobile A partir de 0,99/compte.
: pour utiliser la version complte dExchange 2010, avec toutes les fonctions Le Pack Entreprise
indispensables permettant la dlgation des ressources, la synchronisation mobile, ou encore
lutilisation du MAPI ou du mode dconnect. A partir de 2,99/compte.

Sont respectivement inclus 1Go et 2Go de stockage, avec la possibilit daugmenter lespace sa
guise (cot au Go supplmentaire).

Exchange 2010 a t une rponse un vritable besoin. Chaque
personne a une utilisation bien spcifique de son compte de messagerie
et na pas forcment besoin de 25 Go ! Grce EX10, les utilisateurs ne
paie que le ncessaire et peuvent rajuster leur stockage tout
moment.

Jules-Henri Gavetti, Prsident dIkoula


LES AVANTAGES IKOULA

o Toutes les questions/rponses sur Exchange 2010 disponible en ligne
o Antispam et antivirus inclus
o Offre dcouverte : 1 mois dHosted SharePoint offert (100 Mo, 1 site, 1 utilisateur)
o Des vidos et une documentation complte pour guider lutilisateur dans la dcouverte et
lutilisation de linterface de gestion EX10
o Une infrastructure haute disponibilit avec des quipements redondants
5/2011 14
Projets
d
ompdf est un convertisseur de HTML vers PDF crit
en PHP, qui essaie de respecter au mieux les styles
CSS tout en assurant des fonctionnalits utiles pour
limpression (saut de page, numro de page, couleurs
CMJN, formats de page, rsolution des images, etc).
Le principe de cette bibliothque est de parcourir les
feuilles de style externes ou inline, les balises, et les
attributs des lments HTML pour ensuite les insrer
dans le document PDF rsultant. Il supporte galement
la plupart des attributs de prsentation pour rester com
patible avec les documents HTML sans styles CSS mais
dont la mise en forme passe par des attributs HTML 4.
Cette bibliothque a longtemps t labandon sur
SourceForge, mais elle est depuis plus dun an main
tenant hberge sur Google Code (http://code.google.
com/p/dompdf/) o elle est actuellement maintenue par
de nouveaux dveloppeurs.
Ce projet sadresse aux dveloppeurs Web qui de pr
frence travaillent sur un projet libre en PHP, et qui veulent
convertir des pages simples ou des documents complexes
de manire ce quils respectent au mieux les standards
du W3C. Je ne cache pas que DOMPDF comporte en
core quelques lacunes, du fait quil est encore jeune, no
tamment quelques problmes de performances dans des
documents trop complexes, mais la dernire version beta
sortie il y a un mois en corrige une partie.
Le projet tant Open Source, tout le monde peut
linclure dans son projet et vendre son produit par la
suite. En effet, si ce dernier respecte la licence (GNU
GPL) cela permet lauteur la vente de ses logiciels
condition de fournir aussi le code source, garantis condition de fournir aussi le code source, garantis
sant juste des liberts sur luvre une fois celleci
obtenue.
Actuellement le dveloppement du projet est assur
par deux personnes : Brian Sweeney et Fabien Mna
ger. Ryan Masten, qui a relanc le projet en 2009, nest
plus trs actif, et cest donc Fabien et Brian qui grent le
projet. Dailleurs ils aimeraient tre plus nombreux pour
acclrer le dveloppement et la sortie des versions,
car le travail fourni nest quen partie dans un cadre pro
fessionnel, pour corriger seulement les bugs bloquants,
le reste seffectuant durant leur temps libre.
Comment utiliser dompdf?
Nous allons voir pas pas comment raliser la conver pas comment raliser la conver pas comment raliser la conver
sion dun fichier HTML en PDF laide du langage PHP
et de la bibliothque dompdf. Commencez par crer un
fichier que lon nomme test_dompdf.html. Nous allons y
inclure le code du Listing 1.
Ce fichier est trs simple, cest la partie visuelle du
rendu. Ainsi nous dclarons seulement un paragraphe
(<p>) avec un contenu, sans style pour le moment.
Nous allons maintenant entrer dans le vif du sujet avec
la cration du fichier PHP. Pour cela, crez un fichier
que lon nomme test_dompdf.php. Dans celuici nous
allons mettre le code du Listing 2.
dompdf : crez des PDF la
vole partir de HTML
DOMPDF est une bibliothque crite en PHP qui permet de
gnrer des documents PDF partir de pages web au format
HTML, mises en formes avec des feuilles de style CSS. Le respect
des standards est le matre mot de cet outil, qui volue vers sa
version 0.6. Le projet, trs actif et hberg sur Google Code est
maintenu par des passionns du web et des standards actuels.
Cet article explique :
Laprsentationduprojetdompdf.
Commentutiliserdompdf?
Fonctionnementdedompdf.
DesexemplesdeproductionsPDF.
dompdfetlesCMS.
Ce quil faut savoir :
Des notions sur les technologies Web.
Des notions de Programmation Oriente Objet.
DOMPDF
phpsolmag.org/fr 15
$dompdf->stream(document.pdf, array(Attachment
=> true));. Bien sr vous avez la possibilit de d r vous avez la possibilit de d r vous avez la possibilit de d
poser le fichier directement sur un rpertoire de
votre serveur en utilisant le code suivant : file_put_
contents(document.pdf, $dompdf->output());. En
effet, la mthode file_put_contents permet dcrire le
contenu pass en paramtre dans un fichier.
Tout un tas doptions sont possibles, pour plus
de dtails : http://code.google.com/p/dompdf/wiki/
Usage#Using_the_dompdf_class_directly . Et voil,
votre PDF est gnr, comme le montre la Figure 1.
Rien de compliqu, nestce pas ? Notez que si le docu
ment avait comport des balises <style> ou des styles
inline, ils auraient t pris en compte.
Fonctionnement de dompdf
dompdf tant en fait un moteur de rendu HTML avec
comme support un document PDF, il suit les mmes
La premire ligne permet dinclure le fichier de confi re ligne permet dinclure le fichier de confi re ligne permet dinclure le fichier de confi
guration de dompdf dompdf_config.inc.php. Il soccupe
ra dinclure les classes de dompdf. Puis, on instancie la
classe DOMPDF et on charge le fichier HTML. Deux m
thodes sont possibles : load_html_file ou load_html.
La premire comme son nom lindique permet de char re comme son nom lindique permet de char re comme son nom lindique permet de char
ger un fichier HTML en passant en argument le fichier.
Quant la seconde, elle charge directement le contenu
HTML plutt que le fichier luimme.
Ensuite il sagit de la configuration du format de papier
($dompdf->set_paper(a4, landscape);) que lon d
sire. Ici jai choisi le format A4 avec une orientation en pay
sage. Dautres formats sont disponibles et il est galement
possible de dfinir votre propre format en pt (point).
Lavant dernire opration traite rcursivement les dif re opration traite rcursivement les dif re opration traite rcursivement les dif
frents lments de la DOM du fichier HTML. Pour finir,
nous envoyons le flux PDF directement vers le navi
gateur. Pour cela, nous utilisons linstruction suivante :
Listing 1. Document HTML convertir
<!DOCTYPE html>
<html lang=fr>
<head>
<title>Page de Test HTML - dompdf, un outil puissant pour convertir de lHTML vers PDF en PHP</title>
</head>
<body>
<p>
Cette page <em>HTML</em> va etre convertie a laide de <em>dompdf</em> en <em>PDF</em>
</p>
</body>
</html>
Listing 2. Instanciation de lobjet DOMPDF
require(repertoire/de/dompdf/dompdf_confg.inc.php);
$dompdf = new DOMPDF();
$flename = test_dompdf.html
$dompdf->load_html_fle($flename);
// OU si vous avez acces au contenu HTML plutot quau fchier HTML lui-meme
//$dompdf->load_html($html);
// dautres formats sont dispo, il est aussi possible de dfnir un format en pt
$dompdf->set_paper(a4, landscape);
$dompdf->render();
// Si vous voulez le faire tlcharger par le navigateur
$dompdf->stream(document.pdf, array(Attachment => true));
// OU si vous voulez le mettre dans un fcher sur le serveur
// fle_put_contents(document.pdf, $dompdf->output());
5/2011 16
Projets
principes quun moteur de rendu HTML classique, tout
en utilisant ce que PHP lui met disposition.
Le processus peut se rsumer en quelques tapes
malgr sa complexit :
ledocumentHTMLestchargparlextensionDOM
de PHP, un arbre DOM est alors construit,
unarbredeFrames est construit, limage de lar limage de lar limage de lar
borescence des lments de la DOM, ces Frames
sont les briques de base de dompdf, et gardent un
lien vers leur lment de DOM correspondant,
lafeuilledestyleCSSpardfaut(quitaitdailleurs
la base une copie de celle de Mozilla Firefox 1.0)
et toutes les feuilles de styles trouves dans les do
cuments et les styles inline sont alors parcourus et
analyss par un Parser de CSS,
une fois les feuilles de style analyses, tous les
slecteurs CSS sont transforms en expressions
XPath pour crer un Style pour chaque Frame en
passant par larbre DOM du tout dpart et son mo
teur Xpath,
chaque Style permettra de dfnir quel type de
FrameRefower, FramePositioner et FrameDecora-
tor seront associes chaque Frame. Ces trois l
ments seront le ciment qui feront correspondre les
briques Frame. Nous dtaillerons un peu plus tard
leurs diffrences,
toutestmaintenantprtpourlaisserlamagieop t pour laisser la magie op t pour laisser la magie op
rer : on lance le refow de la Frame racine, qui va
rcursivement lancer celui des autres Frames,
lafndurefow de chacune des Frames, un Ren-
derer est cr en fonction encore une fois du style :
cest la peinture du mur de briques. Cest ce mo ce mo ce mo
ment lquedompdfcritdanslefchierPDF,
chaque changement de page, les Frames, leur
lment de DOM et leur FrameRefower, FramePo-
sitioner, FrameDecorator et Renderer sont dtruits
pour rcuprer des ressources.
Une grande partie de ces principes provient du site
du W3, notamment http://www.w3.org/TR/CSS2/visu-
ren.html et http://www.w3.org/TR/CSS2/visudet.html.
Nous avons vu que chaque Frame avait ces trois com
posants de ciment : FrameRefower, FramePositioner
et FrameDecorator.
Chacun dentre eux a la mme importance et forme
un tout pour raliser un rendu correct. Le choix de cha
cun de ses types est dtermin par le style qui leur est
appliqu, notamment leur display. Plutt quun long dis
cours, le Listing 3 prsente une partie du code du Fra-
meFactory de dompdf qui soccupe de faire ces choix.
Commenons par le Reflower. Celuici va dfinir
comment chaque Frame va pousser ou encore faire
descendre chacun de ses frres ou ses descendants.
Par exemple un lment de type block ne prendra pas
la mme place quun lment de type inline. La largeur,
la hauteur ou les marges par exemple seront des styles
dterminants pour cet aspect du rendu.
Ensuite vient le Positioner. Celuici dfinit o sera
plac la Frame, par rapport ses anctres et ses frres.
Pour cet aspect du rendu, le style position ainsi que les
top, right, bottom et left seront prendre en compte,
entre autres.
Et le dernier composant du ciment : le Decorator,
cest lui qui contient par exemple les informations de
disposition des lignes de texte dun lment de type
bloc, ou encore les fonctions de dcoupage des l
ments inline ainsi ce que le soulignement des textes
ou leur alignement. Ce composant agit au sein mme
de chaque Frame, un niveau encore plus bas que la
brique, pour obtenir un bon layout.
Le Renderer quant lui va passer un coup de pin lui va passer un coup de pin lui va passer un coup de pin
ceau sur le mur. Cest par ce processus que sera des
sin le fond des lments, leurs bords, les textes et les
images. Cest aussi par lui que vont passer les balises
JavaScript que lon peut inclure, et aussi les scripts
PHP inline (http://code.google.com/p/dompdf/wiki/
Usage#Inline_PHP_support). Cest lors du Rendering
que lcriture du document PDF est effectue.
Pour lcriture du document PDF, dompdf propose
une option qui permet de choisir quel moyen utiliser
(nous appellerons ceci des backend). Trois choix sont
disponibles actuellement :
labibliothque Cpdf, par dfaut, qui est embarque
avec dompdf et crite en pur PHP,
Figure 1. Rsultat de la conversion de lHTML vers PDF
DOMPDF
phpsolmag.org/fr 17
Listing 1. Document HTML convertir
$style = $frame->get_style();
switch ($style->display) {

case block:
$positioner = Block;
$decorator = Block;
$refower = Block;
break;

case inline-block:
$positioner = Inline;
$decorator = Block;
$refower = Block;
break;
case inline:
$positioner = Inline;
if ( $frame->get_node()->nodeName === #text ) {
$decorator = Text;
$refower = Text;
}
else {
if ( $style->foat !== none ) {
$decorator = Block;
$refower = Block;
}
else {
$decorator = Inline;
$refower = Inline;
}
}
break;
case table:
$positioner = Block;
$decorator = Table;
$refower = Table;
break;

case inline-table:
$positioner = Inline;
$decorator = Table;
$refower = Table;
break;
case table-row-group:
case table-header-group:
case table-footer-group:
$positioner = Null;
$decorator = Table_Row_Group;
$refower = Table_Row_Group;
break;

case table-row:
$positioner = Null;
$decorator = Table_Row;
$refower = Table_Row;
break;
case table-cell:
$positioner = Table_Cell;
$decorator = Table_Cell;
$refower = Table_Cell;
break;

case list-item:
$positioner = Block;
$decorator = Block;
$refower = Block;
break;
case -dompdf-list-bullet:
if ( $style->list_style_position === inside )
$positioner = Inline;
else
$positioner = List_Bullet;
if ( $style->list_style_image !== none )
$decorator = List_Bullet_Image;
else
$decorator = List_Bullet;

$refower = List_Bullet;
break;
case -dompdf-image:
$positioner = Inline;
$decorator = Image;
$refower = Image;
break;

case -dompdf-br:
$positioner = Inline;
$decorator = Inline;
$refower = Inline;
break;
default:
case none:
$positioner = Null;
$decorator = Null;
$refower = Null;
break;
}
$position = $style->position;

if ( $position === absolute )
$positioner = Absolute;
else if ( $position === fxed )
$positioner = Fixed;
// Ensuite, les 3 variables $positioner, $decorator
et $refower sont utilises pour
instancier les objets
5/2011 18
Projets
Figure 3. Quelques types de border supports
Figure 2. Support des transformations 2D CSS
DOMPDF
phpsolmag.org/fr 19
laPDFLib, gratuite et limite ou payante et trs ra s ra s ra
pide (car cest une extension PHP crite en C),
ou bien GD, qui permet de faire le rendu sur une
image (PNG, JPEG ou GIF). Ce choix limite le
rendu 1 page cependant, et est encore expri 1 page cependant, et est encore expri 1 page cependant, et est encore expri
mental.
Danslaplupartdescas,Cpdfestsuffsant,etcestlui
qui est le mieux maintenu. La PDFLib peut aussi tre
utilise si le prix de la licence ne vous freine pas.
Et voil ! Le document est compltement crit, et
vous connaissez maintenant le fonctionnement de
dompdf, dans les grandes lignes. A titre dinformation,
aujourdhui, ce projet totalise plus de 28 000 lignes de
code PHP (daprs les stats Ohloh : https://www.ohloh.
net/p/dompdf/analyses/latest).
Exemples de productions PDF
Une page dexemples est mise disposition par Fa disposition par Fa disposition par Fa
bien, vous permettant de tester tous les exemples four
nis avec la librairie dans la version du trunk svn.
Voici deux exemples de PDF gnrs par la librairie
dompdf :
Supportdestransformations2DCSS(Figure2).
Quelquestypesdebordersupports(Figure3).
Dompdf et les CMS
Une bibliothque na que peu dintrt si elle nest pas
utilisable dans les systmes de gestion de contenus,
blogs, ou frameworks existants. Cest pour cela que des
plugins sont disponibles pour quelquesuns de ces sys
tmes :
Symfony : http://www.symfony-project.org/plugins/
sfDomPDFPlugin,
Drupal:http://drupal.org/project/print,
SPIP:http://www.spip-contrib.net/3719,
Typo3 : http://typo3.org/extensions/repository/view/
ke_dompdf/current/,
Code Ingniter : http://codeigniter.com/wiki/PDF_ge
neration_using_dompdf/.
Dautres plugins sont srement disponibles pour le
systme que vous utilisez sil nest pas dans cette liste.
Si un plugin nexiste pas, quelquun y a srement dj
pens et peuttre crit un article sur son blog !
Conclusion
La communaut de dompdf stend rgulirement, et le
projet mrit par la mme occasion. La ligne de conduite
principale de ce projet est de rester toujours le plus res
pectueux des recommandations du W3C, en utilisant
tout ce qui est disponible tant au niveau des normes
CSS que du format PDF pour donner un rsultat im
peccable. Afin dy arriver encore mieux et dacclrer
le rythme de dveloppement, lquipe est prte ac te ac te ac ac ac
cueillir de nouveaux contributeurs. Bien sr, si vous
navez pas le courage de plonger dans le code de cette
bibliothque mais que vous voulez quand mme don que mais que vous voulez quand mme don que mais que vous voulez quand mme don me don me don
ner un coup de pouce, toutes les remarques seront les
bienvenues.
Dailleurs si vous voulez retrouver le live tweet du
projet dompdf, ce dernier vient tout juste de sinscrire
sur Twitter. Nhsitez pas le suivre pour toute informa le suivre pour toute informa le suivre pour toute informa
tion : @dompdf. Je tiens remercier Fabien Mnager,
travaillant galement Openxtrem, geek ses heures
perdues, passionn du Web et de nombreux projets
Web Open Source, qui ma aid raliser cet article.
Sur Internet
http://www.blog-nouvelles-technologies.fr/archives/2249 Article complet sur dompdf,
http://www.dompdf.com - Le site web du projet,
http://code.google.com/p/dompdf/source/checkout Fichiers source du projet,
http://pxd.me/dompdf/www/examples.php Dmonstration en ligne,
contact@blog-nouvelles-technologies.fr Adresse de lauteur de larticle pour toutes questions ou remarques.
YOHANN POIRON
Autodidacte en matire de dveloppement de sites en PHP, jai to-
ujours pouss ma curiosit sur les sujets et les actualits du Web.
Cest ainsi que jai rcemment cr un blog me permettant de par-
ler de ma veille personnelle et de mon quotidien professionnel auto-
ur des rfexions et commentaires sur les thmes des nouvelles tech-
nologies, des services innovant, du dveloppement, de linteropra-
bilit dans le domaine mdical, des rseaux sociaux et du buzz mar-
keting.
http://www.blog-nouvelles-technologies.fr
Je suis actuellement engag en tant que responsable interopra-
bilit et dveloppeur Web pour la socit Openxtrem pour laquel-
le je ralise des dveloppements permettant de commercialiser le
systme en tant que pur EAI (Enterprise Application Integration) po-
ur les structures de sant, en faisant lextraction des fonctionnalits
mtier (bloc, plan de soins, etc...).
http://www.openxtrem.com
5/2011 20
Dossier
Prsentation de XAMPP
Pour dvelopper une application PHP, il est souvent
ncessaire de disposer dun environnement compor
tant au minimum Apache, MySQL et PHP, mais aussi
dautres briques logicielles pour la gnration de do
cuments PDF, la manipulation de donnes XML ou le
traitement dimages. Mme si linstallation et la coni me si linstallation et la coni me si linstallation et la coni
guration de ces dirents produits nest pas diicile en
soi cela ncessite un peu de temps.
XAMPP est un kit dinstallation dApache gratuit qui
contient justement tous les produits ncessaires aux
besoins les plus courants. Ce kit est dius par Apache
Friends, un projet sans but lucrati destin promouvoir
le serveur Web Apache.
XAMPP prsente de nombreux atouts :
Ilesttrsfacileinstaller(tlcharger,dcompres
ser, dmarrer).
Il incorpore un trs grand nombre de produits et
doutils utiles pour le dveloppement.
Il propose quelques petits programmes
dexemples.
Le projet est vivant et propose trs rgulirement
de nouvelles versions incluant les mises jours r
centes des dirents produits.
XAMPP est disponible pour plusieurs plates
ormes :
Mise en uvre
de XAMPP
XAMPP est un kit dinstallation qui inclut entre autre Apache,
PHP et MySQL, et qui permet de mettre en place trs rapidement
un environnement de dveloppement Web. Dans cet article,
vous apprendrez comment installer et administrer XAMPP pour
Linux, mais aussi comment dvelopper et dployer une petite
application de test utilisant une base de donnes MySQL.
Cet article explique :
LinstallationdeXAMPPpourLinux.
Ladministration de XAMPP pour Linux (dmarrage, arrt, sau-
vegarde).
Le dveloppement dune petite application qui accde une
base de donnes MySQL.
LascurisationdeXAMPPpourLinux.
Ce quil faut savoir :
LescommandesdebasesousLinux.
LesbasedelaprogrammationHTML,PHPetSQL.
Figure 1. Le logo de XAMPP Figure 2. Le rpertoire dinstallation
XAMPP
phpsolmag.org/fr 21
libxml2.7.6
libxslt1.1.26
Ming0.4.2
Webalizer2.21-02
pdfclass009e
ncurses5.3
mod_perl2.0.4
FreeTDS0.63
gettext0.17
IMAPC-Client2007e
OpenLDAP(client)2.3.11
Linux(testsousUbuntu,SuSE,RedHat,Mandriva
et Debian),
Windows(2000,2003,XP,Vistaet7),
SolarisSPARC(version10),
MacOSX(version10.4pourIntel&PPC),encore
en version bta.
Dans cet article, nous nous intresserons la mise en
uvre de XAMPP pour Linux, et plus prcisment la
version 1.7.4 sortie fn janvier 2011. Cette dernire in- re in- re in
clut notamment les produits suivants :
Apache2.2.14
MySQL5.1.41
PHP5.3.1
Perl5.10.1
ProFTPD1.3.2c
phpMyAdmin3.2.4
OpenSSL0.9.8l
GD2.0.1
Freetype2.1.7
libjpeg6b
libpng1.2.12
gdbm1.8.0
zlib1.2.3
expat1.95.2
Sablotron1.0
Figure 3. Dmarrage de XAMPP pour Linux
Figure 5. La page daccueil de XAMPP pour Linux
Figure 4. Dmarrage de XAMPP pour Linux Figure 6. La page de statut de XAMPP
5/2011 22
Dossier
mhashlibrary0.8.18
mcryptlibrary2.5.7
cURL7.19.6
SQLite2.8.17(forPHP4+PHP5)
SQLite3.6.16(forPHP5PDOSQLite)
eAccelerator0.9.5.3
FPDF1.6
bzip2(library)1.0.5
Sur le site Apache Friends (http://www.apachefrien-
ds.org/fr/xampp.html), vous pouvez trouver des infor
mations sur XAMPP, tlcharger la dernire version,
consulter une FAQ et participer un orum de discus un orum de discus un orum de discus
sion.LadernireversiondeXAMPP,ainsiquelesver- reversiondeXAMPP,ainsiquelesver- re version de XAMPP, ainsi que les ver
sions prcdentes, sont aussi disponibles sur Source
Forge(http://sourceforge.net/projects/xampp/ ).
Installation sous Linux
Pour installer XAMPP, nous devons nous connecter en
tant quadministrateur systme(root) notre serveur.
Nous allons commencer par tlcharger la version
1.7.4deXAMPP partir du site Apache Friends :
wge t ht t p: / / www. a pa c he f r i e nds . or g/ downl oa d. php? xa mpp-
l i nux- 1. 7. 4. t a r . gz
Un fois le tlchargement termin, il sufft dextraire
larchive pour installer le produit :
t a r xvz f xa mpp- l i nux- 1. 7. 4. t a r . gz - C / opt
Sur cet exemple, loption - C / opt permet dinstaller
XAMPP sur / opt . Vous devriez obtenir larborescence
suivante sur / opt (voirFigure2).
IlneresteplusqudmarrerXAMPP(voirFigure3):
/ opt / l a mpp/ l a mpp s t a r t
Et voil, cest (dj) fni, il ne reste plus qu vrifer
que tout onctionne correctement en dmarrant votre
navigateur prfr et en saisissant lURL http://local-
host si vous tes en local ou http://serveur partir
duneautremachine.Vousdevriezvoirapparatreune
page qui permet de choisir le langage utiliser (voir
Figure4).
Cette page est aiche uniquement lors du premier
accs XAMPP le langage slectionn est mmori- s XAMPP le langage slectionn est mmori- s XAMPP le langage slectionn est mmori- XAMPP le langage slectionn est mmori- XAMPP le langage slectionn est mmori
Nom Produits utiliss Fichier source
Collection de CD PHP + MySQL + PDF cds.php
Biorythme PHP + GD biorhythm.php
Guest Book Perl guestbook-fr.pl
Instant Art PHP+GD+FreeType iart.php
RpertoireTlphonique PHP + SQLite phonebook.php
phpinfo() PHP phpinfo.php
Tableau 1. Liste des exemples
Figure 7. Lapplication de dmonstration Collection de CD
Figure 8. Exemple de rsultat obtenu avec lapplication de
dmonstration Instant Art
LAMPP ou XAMPP ?
Auparavant ce logiciel sappelait LAMPP, mais il a t re-
nomm XAMPP pour Linux en 2003. Cela explique
pourquoi le rpertoire dinstallation et le script de contrle
de XAMPP sappellent l a mpp.
XAMPP
phpsolmag.org/fr 23
s sur le serveur dans le ichier /opt/lampp/htdocs/xam-
pp/lang.tmp.Unefoislechoixdelalangueeffectu,la
pagedaccueildeXAMPPdevraitsafficher(Figure5).
Cest tout bon !
Petit tour du propritaire
La page daccueil de XAMPP
La page daccueil de XAMPP contient plusieurs liens
qui permettent de vriier ltat du logiciel, de tester les
Tableau 2. Principaux rpertoires et fchiers
Tableau 3. Actions possibles du script /opt/lampp/lampp
Rpertoire/Fichier Contenu
/opt/lampp/backup/ Rpertoirededestinationdessauvegardes.
opt/lampp/bin/ Rpertoiredesexcutablesetfchiersdecommandesfournisavec
XAMPP.VousytrouverezparexemplelesutilitairesdeMySQL(mysql,
mysqldump,etc.),ceuxdApache(apachectl,htpasswd,etc.),etbien
dautres.
/opt/lampp/htdocs/ RpertoireracineduserveurWebApache(DocumentRoot).
/opt/lampp/etc/ Rpertoiredesfchiersdeconfgurationdesdifrentsproduits(voir
ci-dessous).
/opt/lampp/etc/httpd.conf FichierdeconfgurationdApache.
/opt/lampp/etc/my.cnf FichierdeconfgurationdeMySQL.
/opt/lampp/etc/php.ini FichierdeconfgurationdePHP.
/opt/lampp/etc/proftpd.conf FichierdeconfgurationduserveurFTPProFTPD.
/opt/lampp/phpmyadmin/confg.inc.php FichierdeconfgurationdephpMyAdmin.
/opt/lampp/lampp UtilitairedecontrledeXAMPP(prsentdanslasuite).
Action Fonction
start DmarrerXAMPP(Apache,MySQL,ProFTPDetventuellementdautresproduits).
startapache DmarreruniquementApache(avecPHPetlesupportSSL,saufsicedernieratexplicitementstoppau-
paravantaveclacommandestopssl).
startssl DmarreruniquementlesupportSSL(etPHP);sileserveurApacheestlanc,ilestredmarraveclesupport
SSL.
startmysql Dmarrer uniquement MySQL.
startftp DmarreruniquementProFTPD.
stop ArrterXAMPP(Apache,MySQL,ProFTPDetventuellementdautresproduits)
stopapache ArrteruniquementApache
stopssl ArrteruniquementlesupportSSL;sileserveurApacheestlanc,ilestredmarrsanslesupportSSL
(maisavecPHP).
stopmysql ArrteruniquementMySQL.
stopftp ArrteruniquementProFTPD.
reload RechargerXAMPP(Apache,MySQL,ProFTPDetventuellementdautresproduits)
reloadapache RechargeruniquementApache.
reloadmysql RechargeruniquementMySQL.
reloadftp RechargeruniquementProFTPD.
restart RedmarrerXAMPP(quivalentdestoppuisstart).
restartapache RedmarreruniquementApache(quivalentdestopapachepuisstartapache).
security VriferetconfgurerlascuritdeXAMPP(abordultrieurement).
php5 ActiverPHP5(actuellementsansintrtpuisquePHP5estactivpardfautetquecestlaseuleversion
disponible).
phpstatus Afcher la version de PHP qui est active.
backup SauvegarderXAMPP(abordultrieurement).
panel DmarrerlepanneaudecontrlegraphiquedeXAMPP(voirci-dessous).
status AfcherlestatutdeXAMPP(Apache,MySQLetProFTPD).
version Afcher la version de XAMPP.
5/2011 24
Dossier
petits programmes de dmonstration ou daccder aux
outils. Le lien Statut aiche une page qui permet de voir
cequiestdmarroupas(Figure6).
Le lien Scurit aiche une page qui permet de v
riier le niveau de scurit de linstallation de XAM
PP nous y reviendrons ultrieurement. Le Lien Do-
cumentation aichage une page contenant ellemme
plusieurs liens vers les documentations oicielles
des principaux produits (notammentApache, PHP et
MySQL)etversquelquestutorielssurPHP,HTMLet
Perl. Le Lien Composants aiche une page donnant
la liste de tous les logiciels inclus dans la distribution,
avec pour chacun dentre eux un lien vers leur site oi
ciel respecti.
Les applications de dmonstration et les outils
XAMPP prsente six applications de dmonstration.
Les ichiers source de ces exemples sont stocks
dans le rpertoire /opt/lampp/htdocs/xampp. Le lien
phpinfo() aiche le rsultat de lappel la onction PHP
phpi nf o( ) et permet donc de voir trs prcisment la
coniguration de PHP, et notamment les extensions
disponibles.
XAMPP propose aussi deux outils bien pratiques,
phpMyAdmin, la clbre application Web de gestion
des bases de donnes MySQL, ainsi que Webalizer,
la non moins clbre application danalyse du traic
dun site Web. Dans la suite de cet article, nous ver
rons comment utiliser phpMyAdmin pour crer la pe
tite base de donnes utilise dans notre application
de test.
Emplacement des fchiers
Tout ce qui est fourni avec XAMPP se trouve dans le
rpertoiredinstallation(/opt/lampp en ce qui concerne
cetarticle)vousytrouvereznotammentlesprincipaux
rpertoiresetfichiersprsentsdansleTableau2.
Contrler XAMPP
Le script /opt/lampp/lampppermetdecontrlertrspr- spr- s pr
cisment XAMPP. Son utilisation est trs simple :
/ opt / l a mpp/ l a mpp <a c t i on>
Le panneau de contrle graphique de XAMPP per
met darrter ou de dmarrer XAMMP ou lun des trois
composants principaux (Apache, MySQL, ProFTPD)
ilalallureprsentedanslaFigure9.Cepanneaude
contrle ncessite un environnement graphique op
rationnel(XWindow,GTK)ainsiquePython(avecles
modulesPyGTKetctypes).
Si le lancement du panneau avec la commande /
opt / l a mpp/ l a mpp ne fonctionne pas (erreur du style
unde f i ne d s ymbol : FT_Gl yphSl ot _Embol de n), vous pou
vezessayerdelalancerdirectementaveclacommande
Figure 9. Panneau de contrle graphique de XAMPP
Figure 10. Cration de la base de donnes
Figure 11. Cration de la table
Nom Type Null Index AUTO_INCREMENT
id INT Non PRIMARY Oui
isbn VARCHAR(20) Oui
titre VARCHAR(100) Non
Tableau 4. Structure de la table l i vr e s
XAMPP
phpsolmag.org/fr 25
/ o p t / l a mp p / s h a r e / x a mp p - c o n t r o l - p a n e l / x a mp p -
c ont r ol - pa ne l . Pour les amateurs, jai post un mes
sage avec une autre solution de contournement sur le
site du support Apache Friends (http://www.apache-
friends.org/f/viewtopic.php?f=17&t=44645 ). Dmarrer
automatiquement XAMPP au dmarrage du systme
dpend de la distribution Linux. Sur une distribution de
type Red Hat ou Mandriva, vous pouvez procder de
la maniresuivantedansunesessionroot(testavec
succs sur une distribution Centos).
Crezunliensymboliquevers/opt/lampp/lampp dans
/etc/init.d :
l n - s / opt / l a mpp/ l a mpp / e t c / i ni t . d/ l a mpp
Ajouter le service lampp dans la confguration de d
marrage :
chkconfg --add lampp
Pour inormation, le script /opt/lampp/lampp est conf
gur pour dmarrer XAMPP dans les niveaux de d
marrage3,4et5.
Dvelopper une petite application
Maintenant que XAMPP est install et dmarr, nous al
lons pouvoir tester lcriture et le dploiement dune petite
(toutepetite!)application.Pourchangerdelasempiter
nelle dmonstration Hello World, nous allons dvelopper
Figure 12. Dfnition des colonnes de la table
Figure 14. Afchage initiale de la page
Figure 13. Saisie dun premier livre
Figure 15. Saisie dun nouveau livre
Listing 1. Le script pub.inc.php
<? php
// Prparation de valeurs pour laffchage.
f unc t i on ve r s Pa ge ( $va l e ur ) {
r e t ur n i s _a r r a y( $va l e ur ) ?
a r r a y_ma p( ve r s Pa ge , $va l e ur ) :
nl 2br ( ht ml e nt i t i e s ( $va l e ur , ENT_
QUOTES, UTF- 8 ) ) ;
}
/ / Conne xi on a l a ba s e de donn e s .
f unc t i on dbConne c t ( ) {
$s our c e = mys ql : hos t =l oc a l hos t ; dbna me =pub ;
$ut i l i s a t e ur = r oot ;
$mot De Pa s s e = ;
$db = ne w PDO( $s our c e , $ut i l i s a t e ur , $mot De Pa s s e ) ;
$db- >s e t At t r i but e ( PDO: : ATTR_ERRMODE, PDO: : ERRMODE_
EXCEPTI ON) ;
r e t ur n $db;
}
/ / Ex c ut i on d une r e que t e .
f unc t i on dbExe c ut e ( $db, $s ql ) {
$r e que t e = $db- >pr e pa r e ( $s ql ) ;
$a r gume nt s = f unc _ge t _a r gs ( ) ;
a r r a y_s hi f t ( $a r gume nt s ) ;
a r r a y_s hi f t ( $a r gume nt s ) ;
f or ( $i = 0; $i < c ount ( $a r gume nt s ) ; $i ++) {
$r e que t e - >bi ndPa r a m( : p . $i , $a r gume nt s [ $i ] ) ;
}
$r e que t e - >e xe c ut e ( ) ;
r e t ur n $r e que t e ;
}
/ / Le c t ur e ( f e t c h) du r s ul t a t d une r e que t e .
f unc t i on dbFe t c h( $r e que t e ) {
r e t ur n $r e que t e - >f e t c h( ) ;
}
? >
5/2011 26
Dossier
une petit application qui aiche une liste de livres et per
met den ajouter et den supprimer. La liste des livres est
stocke dans une table dune base de donnes MySQL.
Pour commencer, nous allons donc utiliser phpMyAd
min pour crer notre base de donnes et notre table.
SurlapagedaccueildeXAMPP,cliquezsurlelienphp-
Listing 2. Le script livres.php
<? php
@include_once( pub. i nc . php ) ;
$me s s a ge = null;
t r y {
/ / Se c onne c t e r a l a ba s e de donn e s .
$db = dbConne c t ( ) ;
/ / D t e r mi ne r s i une a c t i on pa r t i c ul i e r e e s t r e qui s e ,
e t s i oui ,
/ / f a i r e l e n c e s s a i r e .
// Ce serait une bonne ide de vrifer la validit
de s donn e s e n e nt r e . . .
switch ( @$_GET[ a c t i on ] ) {
case a j out e r :
$s ql = I NSERT I NTO l i vr e s ( i s bn, t i t r e )
VALUES( : p0, : p1) ;
dbExe c ut e ( $db, $s ql , $_POST[ i s bn ] , $_
POST[ t i t r e ] ) ;
break;
case s uppr i me r :
$s ql = DELETE FROM l i vr e s WHERE i d = : p0 ;
dbExe c ut e ( $db, $s ql , $_GET[ i d ] ) ;
break;
}
/ / Ex c ut e r l a r e que t e de s l e c t i on de t ous l e s
l i vr e s .
$s ql = SELECT i d, i s bn, t i t r e FROM l i vr e s ;
$r e que t e = dbExe c ut e ( $db, $s ql ) ;
} c a t c h ( PDOExc e pt i on $e ) {
/ / En c a s d e r r e ur , pr pa r e r un me s s a ge .
/ / Pe ut mi e ux f a i r e : l e me s s a ge n e s t pa s t r s
c onvi vi a l pour l ut i l i s a t e ur . . .
$me s s a ge = s pr i nt f ( Er r e ur ( %s ) . , $e - >ge t Me s s a ge ( ) ) ;
}
? >
<? php echo <? xml ve r s i on= 1. 0 e nc odi ng= UTF-
8 ? > , \ n ; ? >
<! DOCTYPE ht ml PUBLI C - / / W3C/ / DTD XHTML 1. 0 St r i c t / /
EN
ht t p: / / www. w3. or g/ TR/ xht ml 1/ DTD/ xht ml 1- s t r i c t . dt d >
<ht ml xml ns =http://www.w3.org/1999/xhtml>
<he a d>
<t i t l e >Livres</ t i t l e >
<l i nk hr e f =pub.css r e l =stylesheet t ype =text/
css / >
</ he a d>
<body>
<? php if ( empty( $me s s a ge ) ) : ? >
<! - - Li s t e de s l i vr e s - - >
<t a bl e bor de r =1 c e l l pa ddi ng=4 c e l l s pa c i ng=0>
<t r a l i gn=center>
<t h>Identifant</ t h><t h>ISBN</ t h><t h>Titre</
t h><t h>Action</ t h>
</ t r >
<? php
$s uppr i me r = <a onclick=return confrm(\Est-ce
bi e n r a i s onna bl e ? \ ) ; .
hr e f = l i vr e s . php? a c t i on=s uppr i me r &a
mp; i d=%s >s uppr i me r </ a > ;
while ( $l i gne = ve r s Pa ge ( dbFe t c h( $r e que t e ) ) ) {
pr i nt f
(
<t r ><t d>%s </ t d><t d>%s </ t d><t d>%s </
t d><t d>%s </ t d></ t r > ,
$l i gne [ i d ] , $l i gne [ i s bn ] , $l i gne [ t i t r e ] , s
pr i nt f ( $s uppr i me r , $l i gne [ i d ] )
) ;
}
? >
</ t a bl e >
<p / >
<! - - For mul a i r e d a j out - - >
<f or m a c t i on=livres.php?action=ajouter
me t hod=post>
<di v>
<t a bl e bor de r =0 c e l l pa ddi ng=0
c e l l s pa c i ng=2>
<t r ><t d>ISBN&nbs p; </ t d>
<t d><i nput t ype =text na me =isbn s i z e =20
ma xl e ngt h=20 / ></ t d></ t r >
<t r ><t d>Titre&nbs p; </ t d>
<t d><i nput t ype =text na me =titre s i z e =75
ma xl e ngt h=75 / ></ t d></ t r >
<t r ><t d></ t d><t d><i nput t ype =submit na me =ok
va l ue =Ajouter / ></ t d></ t r >
</ t a bl e >
</ di v>
</ f or m>
<? php else: ? >
<! - - Me s s a ge d e r r e ur ve nt ue l - - >
<di v c l a s s =red><? php echo ve r s Pa ge ( $me s s a ge ) ;
? ></ di v>
<? php endif; ? >
</ body>
</ ht ml >
XAMPP
phpsolmag.org/fr 27
MyAdmin. Sur la page daccueil de phpMyAdmin, sai
sissezlenomdelanouvellebasededonne(pub) puis
cliquezsurleboutonCrer (Figure10).
Unefoisquelebasededonnesestcre,vousac
cdez la page dadministration de cette nouvelle base
dedonnes.Danscettepage,dfinissezunenouvelle
table nomme l i vr e s et comportant trois colonnes puis
cliquezsurleboutonExcuter (Figure11).
Ensuite,dfinissezlestroiscolonnesdelatablelivres
prsentesdansleTableau4(Figure12).Saisissezles
rfrences de ce livre (recommand par lauteur -)),
puis cliquez sur le bouton Excuter (Figure 13). Cest
ini pour la base de donnes. Nous allons maintenant
passer la partie PHP. Commenons par crer un script
pub.inc.php contenant quelques dinitions de onctions
utiles(voirListing1).
Commevouspouvezleconstater,nousutilisonsPDO
pour accder la base de donnes. Passons mainte la base de donnes. Passons mainte la base de donnes. Passons mainte
nant au script livres.php qui va se charger de toute la
gestiondenotrepage(voirListing2).Lapremirepar- repar- re par
tie du script contient principalement du code PHP et se
chargedegrerlalogiqueapplicative(pluttsimpliste
!). La deuxime partie du script contient principalement
ducodeHTMLetsechargedelaffichagedelapage.
Pour terminer, nous allons dinir la petite euille de
style pub.cssutilisedanslapage(voirListing3).
Notre application est prteilnenousresteplusqu
la dployer sur le serveur ain de la tester. Pour cela,
nous allons crer un rpertoire pub dans /opt/lampp/
htdocs et y copier nos trois ichiers pub.inc.php, pub.css
et livres.php.Ouvronsmaintenantnotrenavigateurpr
fretsaisissonslURLdenotrepage(http://localhost/
pub/livres.php ou http://localhost/pub/livres.php).Vous
devriezobtenirlersultatmontrdanslaFigure14.
Pourtesterlajoutdunnouveaulivre,vouspouvezsaisir
les inormations suivantes puis cliquer sur le bouton Ajouter
(Figure 15). Vousdevriezalorsobtenirlersultatprsent
danslaFigure16.Jevouslaissetesterlasuppression.
Scurisation
Par daut, linstallation de XAMPP nest pas du tout s
curise. Si cela peut ne pas poser de problme pour un
Listing 3. La feuille de style pub.css
body {
f ont - f a mi l y: ve r da na , he l ve t i c a ;
c ol or : #000000;
ba c kgr ound- c ol or : #f f f f f f ;
f ont - s i z e : 12px;
}
t d {
f ont - f a mi l y: ve r da na , he l ve t i c a ;
c ol or : #000000;
f ont - s i z e : 12px;
}
a {
f ont - f a mi l y: ve r da na , he l ve t i c a ;
f ont - s i z e : 12px;
}
. r e d {
f ont - f a mi l y: ve r da na , he l ve t i c a ;
c ol or : #df 0000;
f ont - we i ght : bol d;
f ont - s i z e : 12px;
}
Figure 16. Rsultat de la saisie dun nouveau livre
Figure 17. Le statut initial de scurit de XAMPP
Figure 18. Scurisation de XAMPP
5/2011 28
Dossier
environnement de dveloppement, il nen est videm
ment pas de mme pour un environnement de produc me pour un environnement de produc me pour un environnement de produc
tion. Le statut de scurit de XAMPP peut tre vrii
en cliquant sur le lien Scuritdelapagedaccueil(voir
Figure17).
Comme le montre cette page, il existe plusieurs pro
blmes de scurit :
Les pages de XAMPP (statut, exemples, outils) ne
sont pas protges et tout le monde peut y acc
der.
Lutilisateur pma de phpMyAdmin na pas de mot de
passe.
LadministrateurdeMySQL(root)napasdemotde
passe.
LemotdepassepardfautdelutilisateurFTPno- LemotdepassepardfautdelutilisateurFTPno
body est inchang.
Pour corriger ces problmesdescurit,vouspouvez
utiliser la commande suivante en tant que root :
/ opt / l a mpp/ l a mpp s e c ur i t y
Cette commande excute un petit utilitaire interacti
quivrifeleniveaudescuritdelinstallationetvous
permetdersoudrelesproblmessignalsendfnis- messignalsendfnis- messignalsendfnis
santdesmotsdepasse(voirFigure18).
Une fois lopration termine, vous devrez saisir le
nom dutilisateur l a mppetlemotdepassequevousavez
dini pour accder aux pages de XAMPP : http://local-
host/xampp/ ou http://serveur/xampp/ (voir Figure 19).
Dans la page relative la scurit, vous devriez main- la scurit, vous devriez main- la scurit, vous devriez main
tenant obtenir les statuts prsents dans la Figure 20.
De mme, pour accder phpMyAdmin(http://localhost/
phpmyadmin/ ou http://serveur/phpmyadmin/), il vous
faudra dornavant saisir un nom dutilisateur (r oot par
exemple)etlemotdepasseassoci(voirFigure21).
Par ailleurs, si le mot de passe de lutilisateur r oot
de MySQL a t dini, lexemple Collection de CD ne
fonctionneplus.Pourrsoudreleproblme,ilfautdi- me,ilfautdi- me, il aut di
ter le ichier /opt/lampp/htdocs/xampp/cds.php et ajou
ter le mot de passe dans les appels mys ql _c onne c t .
Sauvegarde
Lutilitaire de contrle de XAMPP permet de sauvegar
dertrsfacilementvotreenvironnement(basededon- sfacilementvotreenvironnement(basededon- sfacilementvotreenvironnement(basededon
Figure 19. Authentifcation pour accder aux pages de XAMPP
Figure 20. Le statut de scurit de XAMPP aprs correction
Figure 21. Authentifcation pour phpMyAdmin
XAMPP
phpsolmag.org/fr 29
nes, ichiers de coniguration, ichiers htdocs). Pour
cela, il suit de saisir la commande suivante en tant que
root : / opt / l a mpp/ l a mpp ba c kup
Si un mot de passe a t dini pour lutilisateur root
deMySQL,vousdevezlajouter la in de la ligne de
commande.Malheureusement,danslaversion1.7.4,il
y a un bug qui empche la commande de onctionner
correctementetvousobtenezuneerreurpe r f or ma nc e _
s c he ma : FAI LED. Ce problme peut tre rsolu en di- me peut tre rsolu en di- me peut tre rsolu en di tre rsolu en di tre rsolu en di
tant le script /opt/lampp/share/lampp/backup et en ajou
tant la condition -o $i = performance_schema au
testdelaligne39:
# if test $i = Database -o $i = information_
s c he ma
if test $i = Database -o $i = information_schema
-o $i = performance_schema
Une fois cette correction effectue, la sauvegarde
onctionne sans problme (Figure 22). La sauvegarde
se matrialise par un script shell (original !) xampp-
backup-dd-mm-yy.sh stock dans le rpertoire /opt/
lampp/backup/ ce fchier doit lui mme tre sauve- me tre sauve me tre sauve tre sauve tre sauve
gard en lieu sr !
Encasdebesoin,ilestpossiblederestaurerunesau
vegarde, sur la mme machine, ou sur une autre ma me machine, ou sur une autre ma me machine, ou sur une autre ma
chine, du moment que la version de XAMPP est exac
tement la mme. Pour cela, en tant que root, il suit
dexcuter le script qui correspond la sauvegarde, par
exemple s h xa mpp- ba c kup- 18- 02- 11. s h. L encore, si
un mot de passe a t dini pour lutilisateur root de
MySQL,vousdevezlajouterlafindelalignedecom- la in de la ligne de com la in de la ligne de com
mande.
Commevouslevoyez,vouspouvezavoirbesoinde
redmarrer XAMPP. Petite prcision trouve sur le site
Apache Friends, je cite : Tout devrait marcher parfaite-
ment. Mais toujours penser que cette fonction est en-
core en dveloppement et quelle nest disponible quen
version Bta. A bon entendeur, salut !
Conclusion
A travers cet article vous avez pu constater que
XAMPPestunproduittrsfacileinstalleretadmi- sfacileinstalleretadmi- s acile installer et admi installer et admi installer et admi admi admi
nistrer, mais nous navons ait quentreapercevoir toute
sarichessefonctionnelle.Nhsitezdoncpaslinstal- linstal linstal
ler pour voir tout ce quil propose.
Figure 22. Sauvegarde
Figure 23. Restauration dune sauvegarde
OLIVIER HEURTEL
Aprs plus de huit ans passs en socit de service, o il a successive-
ment occup les postes de dveloppeur, chef de projet puis directeur
de projet, lauteur a dmarr une activit de consultant/formateur
indpendant spcialis sur les bases de donnes (Oracle, MySQL) et
le dveloppement Web (PHP). Il est certif Oracle Certifed Professio-
nal et a rdig plusieurs livres sur PHP et Oracle publis aux ditions
ENI.
5/2011 30
Pratique
I
l peut savrer utile de ne montrer quun sous-ensemble
de donnes un utilisateur ou un groupe dutilisateurs.
Cela permet de personnaliser lapparence de la base
en fonction de lutilisateur : parce quil a des privilges res-
treints, ou pour rduire la complexit dutilisation. Ces op-
rations sont possibles grce la cration de vues.
Une vue est une table drive dynamiquement dune
ou plusieurs tables, ou dautres vues. Pour un utilisateur,
la vue est une table comme les autres, elle comporte un
ensemble de colonnes et de lignes. Toute modification
de donnes dans une des tables utilises par la vue est
immdiatement rpercute dans la vue. La vue peut tre
consulte comme une table de la base, et sous certaines
conditions, ses donnes peuvent tre modifies avec les
commandes I NSERT, DELETE et UPDATE.
Outre le fait que les vues permettent damliorer la
scurit en cachant des parties de la base un utili-
sateur donn, elles simplifient le dveloppement et la
maintenance dapplications.
Lorsque des traitements ncessitent linterrogation de
plusieurs tables, avec des jointures complexes, il peut
tre utile de fournir une vue qui sera utilise par le d-
veloppeur dapplication. Celle-ci lui vitera lcriture de
jointures, en transformant une requte complexe sur
plusieurs tables en une requte visant une unique table.
En cas de rorganisation du schma relationnel (ajout
de colonnes dans des tables, tables scindes, ...), la
cration de vues permet de ne pas avoir modifier les
requtes de lapplication. Par exemple, si une table Y
est partage en plusieurs tables, il suffit dcrire une
vue Y dont la structure est celle de lancienne table,
pour que lutilisateur puisse la manipuler comme avant.
Cet article prsente les commandes SQL de cration,
de suppression et dinterrogation dune vue, ainsi que
les conditions quune vue doit respecter pour que la
mise jour de ses donnes soit autorise. La dernire
partie explique les techniques utilises par les SGBD
pour grer les vues.
Afin dexcuter les exemples, il est ncessaire que
vous utilisiez lenvironnement de travail prsent dans
les articles prcdents. Les requtes proposes dans
cet article sont appliques la base bi bl i o prsente
dans les numros prcdents.
Crer une vue
Cette partie prsente la commande SQL de cration de
vue et ses options, et explique comment crer diffrents
types de vues.
Commande SQL
La vue est cre par la commande SQL CREATE VI EW
partir dune requte SELECT qui dfinit les donnes qui
seront visibles :
CREATE VI EWnom_vue
[ ( nom_c ol onne 1 [ , nom_c ol onne 2, . . .
] ) ]
AS r e que t e _s e l e c t
SQL : les vues
Savoir manipuler les vues permet de limiter laccs
un sous-ensemble de donnes pour une catgorie
dutilisateurs, de simplifier linterrogation de la base et dtre
indpendant du schma relationnel en cas de modification
de ce dernier.
Cet article explique :
Lintrtdesvues.
Commentlescreretlesutiliser.
Ce quil faut savoir :
BasesdeSQL:manipuleretinterrogerlesdonnes.
SQL : les vues
phpsolmag.org/fr 31
Crer une vue verticale
La vue verticale slectionne un sous-ensemble de co-
lonnes dune ou plusieurs tables. La requte SELECT com-
porte donc une liste de colonnes et ventuellement une
restriction. Il est ainsi possible de fournir les donnes
ncessaires un groupe dutilisateurs, tout en excluant
celles superflues ou qui ne doivent pas tre divulgues
ce groupe. Par exemple, un vendeur dune librairie verra
le prix, le titre et lISBN dun livre, tandis quun magasinier
verra lISBN, la zone de stockage et la quantit en stock.
Linstruction ci-aprs cre une vue ma ga s i ni e r qui
donne accs uniquement aux informations utiles un
magasinier pour tous les livres de la base :
CREATE VI EWma ga s i ne r AS
SELECT i s bn, qua nt i t e , c ode _z one
FROM l i vr e ;
Crer une vue de jointure
Les vues verticales et horizontales sont destines afficher
les donnes ncessaires un groupe dutilisateurs. Cest-
-dire que les donnes qui ne les concernent pas ne leur
seront pas accessibles. La vue de jointure, quant elle, est
utilise pour simplifier laccs des donnes stockes dans
plusieurs tables. Si une vue de jointure est cre, un dve-
loppeur dapplications pourra interroger cette vue plutt que
de devoir crire des jointures complexes.
Lexemple ci-dessous cre la vue i nf o_l i vr e qui com-
porte quatre colonnes : le titre du livre, sa date de paru-
tion, le nom et le prnom de lauteur. Pour extraire ce
rsultat, il faut joindre les tables l i vr e , e c r i t et a ut e ur :
CREATE VI EWi nf o_l i vr e AS
SELECT L. t i t r e , L. da t e _pa r ut i on,
A. nom, A. pr e nom FROM l i vr e L
NATURAL J OI N e c r i t NATURAL J OI N
a ut e ur A;
Une fois cette vue cre, un utilisateur obtiendra le
titre et le nom des auteurs avec une requte simple,
sans jointure :
SELECT t i t r e , nom FROM i nf o_l i vr e ;
Crer une vue de groupe
La vue de groupe, comme celle de jointure, simplifie lcri-
ture ultrieure de requtes. Elle consiste stocker le r-
sultat dune ou plusieurs oprations de groupe (GROUP BY).
Crer une vue de vue
La syntaxe de cration de vue reste identique si lon
souhaite crer une vue partir dune table ou partir
dune vue dj existante. Pour crer une seconde vue
t i t r e _nom contenant deux colonnes (le titre du livre et le
nom de lauteur) partir de la vue i nf o_l i vr e :
[ WI TH [ CASCADED| LOCAL] CHECK
OPTI ON] ;
La clause optionnelle WI TH CHECK OPTI ON dfnit le com-
portement en cas de mise jour des donnes dune
vue. Elle sera dcrite dans la partie intitule Mettre
jour une vue.
Linstruction ci-aprs cre une vue da t e _l i vr e qui
contient les titres et les dates de parution de tous les
livres stocks dans la table l i vr e :
CREATE VI EWda t e _l i vr e
AS SELECT t i t r e , da t e _pa r ut i on FROM
l i vr e ;
Le nom donn la vue doit tre unique dans la base,
utiliser un nom de table ou dune autre vue provoquera
un chec lors de la cration.
Nommer les colonnes
Par dfaut, les colonnes de la vue prennent le nom
des colonnes de la requte SELECT. La vue da t e _l i vr e
comporte donc deux colonnes intitules t i t r e et da t e _
pa r ut i on. Il est possible de dfinir le nom de chaque
colonne de la vue. Pour ce faire, il faut placer la liste des
noms de colonnes entre parenthses, aprs le nom don-
n la vue. Cette liste doit comporter le mme nombre
de colonnes que le rsultat de la requte SELECT. Sil y
a une ambigut dans les noms de colonnes retournes
par la requte, il faut indiquer la liste des colonnes.
Pour crer une vue da t e _l i vr e comportant deux co-
lonnes intitules t i t r e et da t e , il faut utiliser linstruction :
CREATE VI EWda t e _l i vr e
( t i t r e , da t e )
AS SELECT t i t r e , da t e _pa r ut i on FROM
l i vr e ;
Crer une vue horizontale
La vue horizontale slectionne des lignes dune ou
plusieurs tables. Un utilisateur qui a accs la vue, ne
verra donc quun sous-ensemble de lignes des tables
dorigine. Ces vues utilisent une requte SELECT * avec
une clause WHERE dfinissant la restriction. Ce type de
vue permet de ne montrer que les lignes ncessaires
un groupe dutilisateur. Par exemple, il est possible
de scinder la table livre en plusieurs vues pour ne mon-
trer aux vendeurs que les livres qui concernent leurs
rayons. Linstruction ci-aprs cre une vue l i vr e _
pol i c i e r comportant toutes les informations nces-
saires au vendeur du rayon policier :
CREATE VI EWl i vr e _pol i c i e r AS
SELECT * FROM l i vr e WHERE ge nr e =
pol i c i e r ;
5/2011 32
Pratique
CREATE VI EWt i t r e _nom AS
SELECT t i t r e , nom FROM i nf o_l i vr e ;
Interroger une vue
Une fois cre, il est possible dinterroger une vue de
la mme manire quune table normale, avec la com-
mande SELECT. La requte suivante affiche tous les
titres des livres prsents dans la vue i nf o_l i vr e :
SELECT t i t r e FROM i nf o_l i vr e ;
Les modifcations dans la structure dune table utilise
par une vue, ne sont pas rpercutes dans la vue. En
cas dajout dune colonne dans la table sous-jacente,
une vue horizontale cre avec un SELECT * naffchera
pas les donnes de cette nouvelle colonne. De plus, la
suppression dune colonne utilise dans une vue verti-
cale provoquera une erreur. Par exemple, si la colonne
q ua nt i t e est supprime de la table livre, la vue verti-
cale ma ga s i ni e r ne fonctionnera plus. Linterrogation
de la vue produira lerreur :
View magasinier references invalid table(s) or column(s).
Il faut donc penser modifer les vues pour quelles
prennent en compte les changements de structure de
leurs tables sous-jacentes. Pour ce faire, il faut suppri-
mer la vue et la recrer.
Mettre jour les donnes dune vue
Les vues sont gnralement utilises pour extraire des
informations de la base, mais il est possible, sous cer-
taines conditions, de modifier les donnes travers la
vue. Si le SGBD est capable de retrouver la ligne dans
la table dorigine et didentifier les colonnes et les va-
leurs leur affecter, alors la vue acceptera les modifica-
tions de donnes.
Vrifer si la mise jour est possible
Lors de la cration dune vue, MySQL indique dans le
dictionnaire des donnes si celle-ci peut tre mise
jour. Linformation est stocke dans la table VI EWS du
dictionnaire (base i nf or ma t i on_s c he ma ). Cette table
comporte les informations sur les vues cres (nom de
la vue, requte de cration, mise jour possible, ...).
Si le champ I S_UPDATABLE contient la valeur NO, les re-
qutes I NSERT, DELETE et UPDATE seront rejetes. La va-
leur de ce champ peut-tre obtenue avec la requte :
SELECT * FROM i nf or ma t i on_s c he ma . VI EWS;
Conditions de mise jour
Pour permettre la modification de donnes (insertion,
suppression, mise jour), une vue doit respecter les
conditions suivantes :
les doublons ne sont pas limins (ne pas utiliser
DI STI NCT),
la requte nutilise pas de fonction dagrgation
(SUM, COUNT, MAX, MI N, AVG),
la requte ne fait pas dopration sur les groupes
(pas de GROUP BY ni de HAVI NG),
un mme nom de colonne napparat pas deux fois,
il ny a pas de colonne drive (pour un UPDATE il
sufft quil ne porte pas sur une colonne drive),
dans le cas dune suppression : pas de jointure,
dans le cas dune insertion ou dune mise jour :
la vue porte sur une table ou sur une jointure in-
terne (pas de jointure externe) et la requte de
modifcation ne porte que sur une table sous-
jacente,
le SGBD est capable de retrouver la ligne dans la
table source et les colonnes,
il ny a pas de sous-requte corrle dans le WHERE,
dans le cas dune insertion : toutes les colonnes qui
nont pas de valeur par dfaut et qui sont NOT NULL
doivent tre renseignes,
la cration de vue nutilise pas ALGORI THM =
TEMPTABLE (uniquement avec MySQL, cf Rsolution
versus matrialisation).
Par exemple, dans une vue i nf o _ l i vr e _ pol i c i e r
constitue de trois colonnes (isbn, titre et date_paru-
tion), il est possible dinsrer un nouveau livre :
CREATE VI EWi nf o_l i vr e _pol i c i e r AS
SELECT i s bn, t i t r e , da t e _pa r ut i on
FROM l i vr e
WHERE ge nr e = pol i c i e r ;
I NSERT I NTO i nf o_l i vr e _pol i c i e r VALUES ( 125- 9- 12498-
1 , Le Sa uve ur , 2005) ;
Linsertion est autorise et rpercute sur la table
l i vr e . Si le champ ge nr e est dfni comme NOT NULL
dans la table l i vr e et que la valeur par dfaut est
fxe au genre policier, alors ce livre prendra la valeur
pol i c i e r lors de linsertion.
La modification du prnom dun auteur dans la vue de
jointure i nf o_l i vr e est accepte par MySQL car cette
modification ne porte que sur une table sous-jacente
la vue. La requte suivante modifie le prnom de lau-
teur Baudelaire, la modification est ralise automati-
quement dans la table a ut e ur :
UPDATE i nf o_l i vr e SET pr e nom= C. WHERE
nom= Ba ude l a i r e ;
Par contre, la modifcation suivante est refuse :
UPDATE i nf o_l i vr e SET t i t r e = Le s Fl e ur s du Ma l ,
pr e nom = C.
SQL : les vues
phpsolmag.org/fr 33
WHERE titre = feurs du mal AND nom
= Ba ude l a i r e ;
MySQL affche un message indiquant que la modif-
cation porte sur plus dune table de la vue de jointure
(table l i vr e pour le titre et a ut e ur pour le prnom) :
Can not modify more than one base table
through a join view info_livre.
Interdire la migration de donnes
Les lignes dune vue font partie de la vue parce quelles
satisfont la condition WHERE de la requte de dfinition.
Lors dune mise jour de donnes dans la vue, une
ligne modifie peut ne plus satisfaire la condition, dans
ce cas elle disparat de la vue.
Par exemple, changer le genre dun livre dune ligne
de la vue horizontale l i vr e _pol i c i e r provoquerait la
migration de la ligne en dehors de la vue (cette vue
naffiche que les livres dont le genre est policier). Si on
insre un nouveau livre dans la vue en lui mettant un
genre posie, la ligne insre est immdiatement sup-
prime de la vue car elle ne respecte pas le WHERE de la
requte de dfinition.
La clause WI TH [ LOCAL| CASCADED] CHECK OPTI ON, dis-
ponible depuis MySQL 5.0.2 dans la commande de
cration de la vue, interdit toute modification de ligne
de la vue ou toute insertion, si elle provoque une migra-
tion de donnes. Cest--dire que lopration est inter-
dite si la ligne modifie ou insre au travers de la vue,
ne peut pas tre visualise par la vue. La ligne ne sera
modifie ou insre dans une table sous-jacente que si
elle satisfait la condition du WHERE. Cette clause ne peut
tre utilise que dans une vue qui accepte les mises
jour.
Les mots cls CASCADED et LOCAL indiquent la porte
de la vrification dans le cas de hirarchies de vues,
cest--dire de vues dfinies partir dautres vues. Le
mot-cl LOCAL indique que la vrification sapplique uni-
quement la vue courante. Le mot-cl CASCADED indique
que la vrification sapplique la hirarchie de vue (va-
leur par dfaut).
Par exemple, la vue vue _l i vr e retient tous les livres
publis avant 1900 :
CREATE VI EWvue _l i vr e AS
SELECT * FROM l i vr e WHERE da t e _
pa r ut i on < 1900 WI TH CHECK OPTI ON;
Les vues v ue _ l i vr e 2 et v ue _ l i vr e 3 sont dfnies par
rapport v ue _ l i vr e :
CREATE VI EWvue _l i vr e 2 AS
SELECT * FROM vue _l i vr e WHERE da t e _
pa r ut i on > 1600 WI TH LOCAL CHECK
OPTI ON;
CREATE VI EWvue _l i vr e 3 AS
SELECT * FROM vue _l i vr e WHERE da t e _
pa r ut i on > 1600
WI TH CASCADED CHECK OPTI ON;
Pour la deuxime vue, linsertion ne sera teste que
sur la vue courante grce lutilisation du mot-cl
LOCAL. Il est possible dinsrer un livre dont lanne est
postrieure 1900 :
I NSERT I NTO vue _l i vr e 2 ( i s bn, t i t r e , ge nr e , da t e _
pa r ut i on, pr i x)
VALUES ( 254- 16589- 5 , L e t oi l e du
di a bl e , pol i c i e r , 2003, 12) ;
1 row OK
Linsertion est accepte car lanne de parution tant
suprieure 1600, la restriction de v ue _ l i vr e 2 est
vrife. La donne insre dans la table livre ne se-
ra pas visible dans v ue _ l i vr e , v ue _ l i vr e 2 et v ue _
l i vr e 3 car la vue v ue _ l i vr e exclut les livres parus
aprs 1900. Par contre, linsertion dans la troisime
vue est rejete car elle est teste par rapport aux res-
trictions des vues de la hirarchie (chec dans v ue _
l i vr e car 2003 > 1900) :
I NSERT I NTO vue _l i vr e 3 ( i s bn, t i t r e , ge nr e , da t e _
pa r ut i on, pr i x)
VALUES ( 254- 16589- 6 , L e t oi l e du
di a bl e , pol i c i e r , 2003, 12) ;
CHECK OPTION failed vue_livre
Supprimer une vue
La commande SQL DROP VI EWsupprime la dfinition de
la vue :
DROP VI EWnom_vue [ RESTRI CT| CASCADE]
Lorsque CASCADE est prcis, les objets qui en d-
pendent sont supprims (toute vue qui utiliserait cette
vue serait efface). La clause RESTRI CT bloque la sup-
pression de la vue si des objets en dpendent, cest
loption par dfaut.
Les vues ont t implmentes dans la version 5
de MySQL. Dans la version actuelle (5.5), RESTRI CT et
CASCADE sont ignors. La suppression dune vue sera
ralise mme si dautres vues en dpendent.
La commande suivante supprime la vue i nf o_l i vr e :
DROP VI EWi nf o_l i vr e ;
Rsolution versus matrialisation
Lorsque le SGBD rencontre une rfrence une vue
dans une requte, il utilise la dfinition de la vue pour
34
transformer la requte en une requte quivalente sur
les tables sous-jacentes. Cette technique est appele
rsolution de vue. Elle est coteuse lorsque la requte
de dfinition utilise des jointures complexes car celles-
ci doivent tre calcules chaque appel de la vue.
Les SGBD proposent une technique alternative :
la matrialisation de vue. Celle-ci consiste stocker
la vue comme une table temporaire dans la base de
donnes. Lorsque la vue est appele la premire fois,
les donnes sont stockes dans la table temporaire. A
chaque modification dune des tables sous-jacente, la
table temporaire doit tre mise jour. La matrialisa-
tion de vue est donc efficace lorsque de nombreuses
requtes sont effectues sur une vue complexe et que
les donnes dorigine ne sont pas souvent modifies.
MySQL dfinit une clause optionnelle ALGORI THMdans
la commande de cration de la vue (elle nexiste pas
dans le standard SQL). Celle-ci prend trois valeurs :
MERGE (rsolution de vue), TEMPTABLE (matrialisation
dans une table temporaire), ou UNDEFI NED (MySQL choi-
sit lalgorithme utiliser). La valeur par dfaut, sil ny a
pas de clause, est UNDEFI NED. MySQL tend privilgier
la rsolution de vues plutt que la matrialisation car
dans MySQL la vue ne peut pas tre mise jour quand
elle utilise une table temporaire. MySQL utilise toujours
des tables temporaires lorsque la dfinition de la vue
contient des fonctions dagrgation, DI STI NCT, GROUP BY,
HAVI NG, LI MI T ou UNI ON.
Conclusion
Dans cet article, vous avez appris crer et utiliser
des vues. Celles-ci vous permettront damliorer la s-
curit, de rduire la complexit daccs aux donnes,
et de rendre les applications indpendantes du schma
relationnel.
CILIA MAURO, MAGALI CONTENSIN
Cilia Mauro est gestionnaire de bases de donnes et dveloppeur
dapplications web au CNRS. Elle enseigne les bases de donnes et
PHP luniversit.
Contact : cilia.mro@gmail.com
Magali Contensin est chef de projet en dveloppement dapplica-
tions au CNRS. Elle enseigne depuis plus de dix ans le dveloppe-
ment dapplications web luniversit et est lauteur de nombreux
articles sur le dveloppement web en PHP.
Contact : http://magali.contensin.online.fr
Sur Internet
http://dev.mysql.com/doc/refman/5.0/fr/views.html
eZ Publish
phpsolmag.org/fr 35
P
our la petite histoire, eZ Publish est un CMS
(Systme de Gestion) dit par la socit norv-
gienne eZ Systems. La dernire version stable
publie est eZ Publish 4.4.X, lance fin 2010. eZ Pu-
blish fonctionne principalement avec le langage de pro-
grammation PHP5, une base de donnes SQL, un ser-
veur Apache et un systme dexploitation Linux (LAMP).
Dautres configurations de serveur sont galement pos-
sibles, voir les liens utiles.
Pourquoi et quand utiliser eZ Publish ?
Lorsque lide de choisir un framework (CakePHP, Sym-
fony, etc...) est carte parce quil est ncessaire de d-
velopper un back-office, ou que repartir dun dvelop-
pement spcifique from scratch ncessite de rinventer
la roue, le choix dun CMS peut simposer facilement.
Ct pratique, le choix dun CMS se fait sur les fonc-
tionnalits correspondant, ou pas, aux besoins du ca-
hier des charges du projet. Il peut galement se baser
sur lexprience utilisateur du back-office.
Ct technique, le choix dun CMS se fait sur les argu-
ments spcifiques quil propose, cest--dire principale-
ment le langage de programmation sur lequel il est bas,
les extensions ou plugins que la communaut ou la so-
cit ditrice propose, toujours ncessairement en rap-
port aux besoins fonctionnels, sa communaut de dve-
loppeurs experts, et ventuellement et surtout son cot.
Lorsque les fonctionnalits dun CMS lambda r-
pondent au plus proche aux besoins fonctionnels et
techniques dun projet, cest lambda quil faut choisir.
Encore faut-il connatre lambda par rapport dautres
CMS.
Sur le march actuellement, diffrents CMS issus du
monde du logiciel libre sont proposs au tlcharge-
ment. Les principaux logiciels concurrents deZ Publish
sont Drupal, Typo3, Joomla, SPIP, voire mme Wor-
dpress.
La solution eZ Publish est tout dabord et surtout puis-
sante par sa flexibilit; De manire gnrale, un site in-
ternet dont le contenu est gr dynamiquement affiche
du contenu de diffrentes faons, ou vues. Ce contenu
doit donc tre structur, mais galement et surtout typ.
Un contenu peut tre par exemple un produit (poss-
dant un titre, deux visuels, une description et un prix)
ou galement un article (possdant un titre, une intro-
duction, un texte). Dans eZ Publish, la structure dcri-
vant un produit ou un article correspond au concept de
classe de contenu (content class en anglais). De mme,
le type dun attribut dune classe de contenu, comme un
titre, est un datatype. Dans ce cas, le datatype est une
ligne de texte. eZ Publish fournit par dfaut une pl-
thore de datatypes, ces derniers tant extensibles. Le
titre dun article Le dernier produit sorti de notre gamme
est donc un attribut de la classe produit.
Le schma suivant rsume ces concepts :
ht tp: //doc.ez.no/ var/doc/storage/ i mages/ez_pu-
blish/technical_manual/4_0/images/concepts_and_
Crer son site internet
avec le CMS eZ Publish
Crer un site internet, quil soit titre personnel ou professionnel, peut
passer par le choix dun CMS (Content Management System ou Systme
de Gestion de Contenu) plutt quun Framework. Que ce soit un blog
sur un musicien quon apprcie, un portail institutionnel ou un site
de vente de t-shirts en ligne, il est ncessaire de connatre les forces
et faiblesses des CMS pour voir un jour son site internet en ligne sans
problme. Dans ce cas, choisir EZ Publish peut tre un choix judicieux.
Cet article explique :
Aprs lecture de cet article, vous aurez une vision thorique et
pratique des points importants assimiler pour vous lancer dans
linstallation et la programmation sur eZ Publish. Des exemples
concrets viendront corroborer les concepts de ce CMS.
Ce quil faut savoir :
Pour comprendre cet article, il est souhaitable de possder
des connaissances basiques sur Linux, Apache, MySQL, ainsi
que de solides comptences en programmation PHP5.
5/2011 36
Pratique
tiple-languages - Le concept de classes de conte-
nu multilingues.
Configuration serveur
Avant de commencer modifier la configuration ser-
veur, il est ncessaire au pralable davoir correctement
install les lments logiciels dun site internet sous
LAMP : Linux (dans notre cas, Ubuntu pour lenvironne-
ment local), Apache, MySQL et PHP.
Les chapitres suivants donnent des exemples bass
sur un site internet dont le nom de domaine www.nou-
nours.com, serait un portail proposant un catalogue de
peluches (Les produits) groupes par catgorie, ainsi
que des pages simples contenant du texte (Page de
prsentation de la socit, mentions lgales, etc...).
Linux
Bien sr, nous nallons pas dtailler et expliquer lins-
tallation dun systme dexploitation Linux, mais plutt
la raison pour laquelle nous choisissons cet OS pour
notre machine de dveloppement en local, ainsi que le
serveur de production sur lequel nous allons faire tour-
ner le site.
Choisir le bon environnement de dveloppement vite
bien des dsagrments. La question que lon se pose
est : dvelopper sous un environnement Windows (avec
WAMP par exemple) ou Linux (Ubuntu par exemple) ?
Mis part la disponibilit des diteurs de programma-
tion sur chacun de ces OS, le choix est propre au d-
veloppeur ou au ple technique (diteur rapide avec
simple coloration syntaxique ou diteur tournant sous
JAVA avec auto-compltion). Il ne faut pas oublier, quen
plus des bugs et contraintes sur Windows, comme la li-
mitation du nombre de caractres dun fichier (trs vite
atteint sur eZ Publish), la lenteur dexcution deZ Pu-
blish avec un systme de fichiers NTFS, un environne-
ment de dveloppement doit tout dabord tre proche
basics/datatypes_attributes_content _class_and_
objects/565-8-eng-GB/datatypes_attributes_content_
class_and_objects_doc.png.
Nous pouvons galement tendre ces concepts pour
un site multilingue ou multisite sans pour autant ajou-
ter une extension ou un plugin comme le ncessite-
raient certains CMS. De mme, le systme de ver-
sionning deZ Publish est inclus par dfaut dans son
noyau.
Conclusion
eZ Publish est un CMS parmi tant dautres, il possde
ses forces et ses faiblesses, nombreux sont les com-
paratifs sur linternet, encore faut-il avoir eu une relle
exprience pour en juger.
Liens utiles :
http://ez.no - Le portail offciel du produit,
http://ez.no/eZPublish/Requirements - Les besoins
logiciels pour installer eZ Publish,
http://alpha.benchmarkr.com/benchmarkrs/11 -
Benchmark fonctionnel prcis mais datant un peu
de 4 CMS,
http://www.cmsmatrix.org - Le comparatif de tous
les CMS existants,
http://www.journaldunet.com/developpeur/tutoriel/
out/040510-10-cms-open-source.shtml - Un autre
comparatif de certains CMS sur le journal du net,
http://share.ez.no/forums/general/ezpublish-vs-dru-
pal-vs-joomla-and-typo3 - Discussion des diff-
rents CMS sur le forum offciel deZ Publish,
http://phpsolmag.org/fr/magazine/1629-ez-publish-
guide-de-developpement - Article sur le concept
de datatype sur eZ Publish,
http://doc.ez.no/eZ-Publish/Technical-manual/4.4/
Concepts-and-basics/Content-management/Mul-
Figure 1. Linterface du back-ofce eZ Publish sur les dernires versions
5/2011 38
Pratique
dun environnement de production. Sans oublier la base
mme des concepts de logiciels libres.
Apache
Avant de nous lancer dans la configuration Apache, il
est ncessaire de crer le rpertoire dans lequel nous
allons installer le site dans notre environnement local.
Par exemple :
/ va r / www/ nounour s .
Les commandes suivantes sont excuter sur un OS
Ubuntu sur notre environnement local avec lutilisateur
root (prfxes par le mot-cl sudo) :
# Al l ons da ns l e r pe r t oi r e de s vi r t ua l hos t s e n l oc a l
$ c d / e t c / a pa c he 2/ s i t e s - a va i l a bl e /
# Cr ons not r e vi r t ua l hos t a ve c l di t e ur ge di t
$ s udo ge di t nounour s . c onf
fchier nounours.conf
# Crons un lien symbolique de fchier de sites-available
ve r s s i t e s - e na bl e d
$ s udo a 2e ns i t e nounour s . c onf
# Ex c ut ons l a c omma nde s ui va nt e pour pr e ndr e e n c ompt e
la nouvelle confguration
$ / e t c / i ni t . d/ a pa c he 2 r e l oa d
Bien sr, noublions pas de dclarer les 2 URLs (front-
offce et back-offce) dfnies dans le virtual host, dans
notre fchier hosts :
$ s udo ge di t / e t c / hos t s
fchier hosts.conf
En testant les URLs http://nounours.local et http://ad-
min.nounours.local/ dans notre navigateur prfr, et
en ayant au pralable cr un fchier vide index.php,
nous arrivons bien sur une page blanche, ne gnrant
aucune erreur dans nos fchiers de logs.
MySQL
Nous allons donc crer notre base de donnes vide
nomme s_nounours travers linterface locale de php-
MyAdmin, ou pour les puristes, en ligne de commande,
et y associer un utilisateur MySQL ayant tous les droits
sur cette base de donnes :
# Cr ons l a ba s e de donn e s s _nounour s
CREATE DATABASE ` s _nounour s ` DEFAULT CHARACTER SET ut f 8
COLLATE ut f 8_uni c ode _c i ;
# Cr ons not r e ut i l i s a t e ur us e r _nounour s
CREATE USER us e r _nounour s @ l oc a l hos t I DENTI FI ED BY
*** ;
# Donnons - l ui t ous l e s dr oi t s s ur l a ba s e de donn e s
us e r _nounour s
GRANT ALL PRI VI LEGES ON * . * TO us e r _
nounour s @ l oc a l hos t I DENTI FI ED BY
*** WI TH GRANT OPTI ON MAX_QUERI ES_
PER_HOUR 0 MAX_CONNECTI ONS_PER_HOUR
0 MAX_UPDATES_PER_HOUR 0 MAX_USER_
CONNECTI ONS 0 ;
# Te s t ons not r e ut i l i s a t e ur e n l i gne de c omma nde
$ s udo mys ql - u us e r _nounour s - p s _nounour s
PHP
Les dernires versions deZ Publish requierent une version
rcente de PHP, de prfrence PHP 5.2.X ou PHP 5.3.X.
# Ce t t e c omma nde pe r me t de c onna t r e l a ve r s i on de PHP
i ns t a l l e
$ php - v
De plus, eZ Publish permet le redimensionnement
dimage, il est donc ncessaire dinstaller, si ce nest
dj fait, le logiciel libre ImageMagick. Figure 2. Le panneau de confguration du mode DEBUG
eZ Publish
phpsolmag.org/fr 39
# Ce t t e c omma nde pe r me t de c onna t r e l a ve r s i on
d I ma ge Ma gi c k i ns t a l l e
$ c onve r t - ve r s i on
Conclusion
Nombre de configurations logicielles sont possibles,
mais optimiser son environnement de dveloppement
permet de gagner en temps, en confort de programma-
tion, et bien sr en argent.
Liens utiles :
http://doc.ez.no/eZ-Publish/Technical-manual/4.4/
Installation/Virtual-host-setup/Virtual-host-example
- Documentation offcielle sur la confguration du
virtual host,
http://ez.no/eZPublish/Requirements- Les besoins
logiciels pour installer eZ Publish.
Installation,
installer le CMS
Il existe deux versions de tlchargement du CMS : une
version entreprise et une version communaut. Nous
allons tlcharger et installer la version 4.4 Fuji deZ
Publish sous Linux, incluant la librairie PHP eZ Compo-
nents. Cette dernire a dailleurs t soumise et vali-
de par la communaut Apache, sous le nom de Zeta
Components.
Aprs avoir donc tlcharg le fichier, dcompress
dans le rpertoire /var/www/nounours, puis vrifi que
les rpertoires et fichiers possdent les bons droits,
nous arrivons donc, en lanant dans notre navigateur
favori, linterface suivante :
fchier install_ez_4_4.png
En cliquant sur le bouton Paramtrage fn, nous
vrifons les ventuels logiciels ou confgurations
manquants.
Nous suivons donc les tapes, jusqu celle o
nous saisissons les paramtres de connexion la
base de donnes dfnie plus tt.
Nous allons nous contenter dun site en franais
uniquement, en laissant la valeur par dfaut.
Nous arrivons sur ltape du package (paquetage) :
ce sont des thmes prdfnis. Nous choisissons le
package le plus simple : Plain site.
Nous faisons correspondre la langue anglaise au
franais : Map to French.
Nous arrivons la page Site details, o nous sai-
sissons donc le Titre (correspondant au title du site,
bien sr modifable ensuite), lURL du site (http://
nounours.local), ce que nous appellerons les si-
teaccess du front-offce (pl a i n _ s i t e) et du back-
offce (pl a i n _ s i t e _ a d mi n), et nous slectionnons
bien sr la base de donnes nomme s_nounours..
Nous crons les identifants du compte super admi-
nistrateur du back-offce, que nous gardons bien en
mmoire.
Nous arrivons donc sur les pages daccueil du
front-offce et du back-offce :
Figure 3. En mode dition, nous avons accs diverses informations
du contenu dit
5/2011 40
Pratique
fchier backoffce_accueil.png
fchier frontoffce_accueil.png
Conclusion
Installer la base deZ Publish est rapide et simple, les
chapitres suivants vont donc demander toute lattention
du dveloppeur.
Liens utiles :
http://ez.no/Requests/eZ-Publish-Enterprise-4.4 -
Tester la version Entreprise,
http://share.ez.no/download-develop/downloads -
Tlcharger la version Communaut,
http://ezcomponents.org - La librairie PHP eZ
Components,
http://incubator.apache.org/zetacomponents -
Apache Zeta Components,
http://ez.no/Demos-videos- Tutoriel et dmonstra-
tion en vido.
Comprendre et configurer
eZ Publish, le contenu
Avant de nous lancer dans le dveloppement pur et dur,
nous allons tout dabord crer notre contenu en back-
office, plus prcisment crer les classes de contenu,
ainsi que larborescence du site.
Il est utile galement de naviguer dans le back-office
pour y trouver et comprendre les nombreuses fonction-
nalits possibles, en cliquant sur les cinq onglets prin-
cipaux.
Avant ceci, nous allons faire correspondre lURL http://
admin.nounours.local http://nounours.local/plain_
site_admin. Dans le fichier RACI NE_DU_SI TE/ s e t t i ngs /
ove r r i de / s i t e . i ni . a ppe nd. php, nous ditons le bloc
[ Si t e Ac c e s s Se t t i ngs ] , en le remplaant par :
[ Si t e Ac c e s s Se t t i ngs ]
For c e Vi r t ua l Hos t =t r ue
Che c kVa l i di t y=f a l s e
Ava i l a bl e Si t e Ac c e s s Li s t [ ] =pl a i n_s i t e
Ava i l a bl e Si t e Ac c e s s Li s t [ ] =pl a i n_s i t e _a dmi n
Ma t c hOr de r =hos t
Hos t Ma t c hMa pI t e ms [ ] =nounour s . l oc a l ; pl a i n_s i t e
Hos t Ma t c hMa pI t e ms [ ] =a dmi n. nounour s . l oc a l ; pl a i n_s i t e _
a dmi n
Nous allons crer nos trois classes de contenu : pro-
duit, catgorie et page. En allant dans Administration >
Figure 4. Page daccueil aprs linstallation
eZ Publish
phpsolmag.org/fr 41
Classes > Content, nous remarquons que linstallation ba-
sique deZ Publish fournit par dfaut des classes titre
dexemple, que nous nallons pas rutiliser. En cliquant sur
le bouton Nouvelle classe, nous arrivons sur linterface
ddition dune classe, sur laquelle nous allons saisir les in-
formations suivantes. Exemple sur la classe produit :
# Ce c i e s t l e nom de l a c l a s s e a u f or ma t huma i n
Nom : pr odui t
# Ce c i e s t l e nom de l a c l a s s e a u f or ma t i nf or ma t i que
Identifant : product
# De s c r i pt i on de l a c l a s s e , nous l a i s s ons vi de
De s c r i pt i on : vi de
# Ceci va gnrer le libell affch en back-offce du
c ont e nu, nous c hoi s i s s ons l a t t r i but
t i t l e c r a pr s
Mod l e de nom d obj e t : <t i t l e >
# Ceci va gnrer automatiquement lURL en back-offce
et en front-offce. Nous choisissons
l a t t r i but t i t l e , ma i s r e ma r quons
donc qu e Z Publ i s h pe r me t de
pe r s onna l i s e r l URL d un c ont e nu e n
c r a nt pa r e xe mpl e un a ut r e a t t r i but
nomm ur l .
Mod l e de g n r a t i on de l URL : <t i t l e >.
Le Tableau 1 rcapitule la structure de la classe pro-
duit. Il naffche pas les valeurs des proprits par d-
faut. Nous obtenons donc (16 est le numro identifant
de la classe produit) :
http://admin.nounours.local/class/view/16.
Nous faisons de mme pour les classes catgo-
rie (en cochant conteneur, les catgories ayant des
produits) et page. Aprs avoir cr nos classes de
contenu, nous allons donc crer larborescence du
site, en crant les instances de ces classes : les ob-
jets.
Voici larborescence que nous crons, partir de
la racine (Nom, puis entre parenthses, la classe de
contenu).
EZ Publish (Folder)
Peluches (Catgorie)
La peluche Mickey Mouse (Produit)
La peluche Minnie Mouse (Produit)
La peluche Donald Duck (Produit)
Poupes (Catgorie)
Mlanie (Produit)
Arthur (Produit)
Mentions lgales (Page)
La socit (Page)
Chaque nud de larborescence se cre de la ma-
nire suivante :
> Cont e nu > S l e c t i on de l a c l a s s e > Cr e r un nouve l
obj e t > Sa i s i e du c ont e nu de c ha que
a t t r i but > Publ i e r
Aprs la publication dun objet, notons que ce der-
nier possde, entre autres, les proprits sui-
vantes : un c ont e nt obj e c t _ i d e t un node _ i d. Le
c ont e nt obj e c t _ i d est lentier identifant unique asso-
ci lobjet, alors que le node _ i d est lidentifant as-
soci lobjet, sur larborescence. Nous en dduisons
donc quun objet peut possder plusieurs node_id,
diffrents endroits de larborescence, ce qui traduit la
notion de multi-emplacements deZ Publish.
Figure 5. Fiche produit dun objet en front-ofce
5/2011 42
Pratique
En mode dition, nous pouvons voir, sur la colonne de
gauche, les diffrentes informations et fonctionnalits
propres un objet.
colonne_gauche_edition.png
Les fichiers de configuration
Comme tout CMS, eZ Publish possde nombre de
proprits configurables possibles. Ces variables
sont ditables dans des fichiers de configuration :
les fichiers .ini. Ces fichiers sont situs dans le r-
pertoire RACI NE_DU_SI TE/ s e t t i ngs . Chacun de ces fi-
chiers possde les valeurs par dfaut des variables
modifiables via le back-office, ou de prfrence en
les ditant manuellement. Plus prcisment, ces fi-
chiers ne sont pas modifier, car faisant partie du
noyau deZ Publish, nous crons un nouveau fichier
en les surchargeant. Une surcharge dune valeur
est un nouveau fichier dans lequel nous crivons la
nouvelle valeur, qui prend la priorit sur la valeur
par dfaut.
Chaque valeur est associe une variable, faisant
partie dun bloc. Au mme titre que nous avons surchar-
g le bloc [ Si t e Ac c e s s Se t t i ngs ] , nous pouvons gale-
ment surcharger dautres variables de bloc.
Exemple
Le fichier des valeurs par dfaut de la connexion la
base de donnes se trouve dans le fichier RACI NE_DU_
SI TE/ s e t t i ngs / s i t e . i ni , dans le bloc Da t a ba s e Se t t i ngs :
[ Da t a ba s e Se t t i ngs ]
Se r ve r =l oc a l hos t
Us e r =r oot
Pa s s wor d=
Da t a ba s e =ne xt ge n
Lors de linstallation, eZ Publish a automatiquement
cr un nouveau fchier surchargeant ces valeurs,
le fchier qui prend dsormais le pas, se trouve dans
RACI NE _ DU _ SI TE/ s e t t i ngs / s i t e a c c e s s / pl a i n _ s i t e /
s i t e. i ni . a ppe nd. php.
[ Da t a ba s e Se t t i ngs ]
Se r ve r =l oc a l hos t
Us e r =us e r _nounour s
Pa s s wor d=YvJ q7ou3VVu5
Da t a ba s e =s _nounour s
Ceci est donc valable pour le s i t e a c c e s s pl a i n _ s i t e
(siteaccess du front-offce). Paralllement, dans le
Figure 6. Linterface dinstallation deZ Publish
eZ Publish
phpsolmag.org/fr 43
rpertoire RACI NE _ DU_ SI TE/ s e t t i ngs / s i t e a c c e s s /
pl a i n _ s i t e _ a d mi n/ , nous remarquons quun mme
fchier existe, possdant les mmes valeurs. Ceci est
donc galement valable pour le s i t e a c c e s s pl a i n _
s i t e _ a d mi n (s i t e a c c e s du back-offce). Nous regrou-
pons donc ces valeurs dans le fchier RACI NE _ DU_
SI TE/ s e t t i ngs / ove r r i de/ s i t e. i ni . a ppe nd. php. Ceci est
donc dsormais valable pour les deux siteaccesses du
front-offce et du back-offce.
De manire gnrale, ce type de fichier doit tre
nomm f i c hi e r . i ni . a ppe nd. php pour la surcharge du
fichier fichier.ini. Suivant sa porte, il est plac soit dans
RACI NE_DU_SI TE/ s e t t i ngs / ove r r i de , soit dans RACI NE_
DU_SI TE/ s e t t i ngs / s i t e a c c e s s / pl a i n_s i t e , soit RACI NE_
DU_SI TE/ s e t t i ngs / s i t e a c c e s s / pl a i n_s i t e _a dmi n.
Dans les chapitres suivants, nous dfinirons les si-
teaccesses (front-office et back-office) par le mot-cl
###SI TEACCESS###.
Conclusion
La notion de surcharge dun siteaccess est une fonc-
tionnalit propre eZ Publish. Elle permet sassocier
une valeur de variable de configuration propre un si-
teaccess uniquement, ou de ltendre tous les siteac-
Figure 7. Ce que le mode DEBUG ON afche en front-ofce
5/2011 44
Pratique
cesses, ce qui permet une grande flexibilit. Ceci tant
dit, elle requiert de la part du dveloppeur une grande
rigueur dans la gestion des variables. Nous verrons de
mme, que le concept de surcharge sapplique gale-
ment dautres rpertoires et fichiers.
Liens utiles :
http://doc.ez.no/eZ-Publish/User-manual/4.x/Daily-
tasks/Publishing-at-multiple-locations - La notion
de multi-emplacements,
http://doc.ez.no/eZ-Publish/User-manual/4.x/The-
administration-interface/The-Object-edit-interface
- dition dun objet,
http://doc.ez.no/eZ-Publish/Technical-manual/4.x/
Concepts-and-basics/Confguration - Siteaccess
et confguration.
Dveloppement,
le langage de templates
Un fichier template est un fichier texte dont lextension
est .tpl. Il dfinit la vue dun objet sur le front-office ou le
back-office. Il contient du code HTML ainsi que du code
de templating eZ Publish. Il ne contient en aucun cas
de PHP comme dautres CMS le permettent. Un objet,
ainsi que ses attributs, peut tre donc affich de diff-
rentes faons. Un fichier template se trouve par dfaut
dans le rpertoire RACI NE_DU_SI TE/ de s i gn. De mme
que les fichiers de configuration prcdemment dfinis,
ces fichiers ne sont pas modifier, car faisant partiedu
noyau. Ces fichiers sont galement surcharger.
De manire plus gnrale, lexception des fichiers
de configuration se trouvant dans les sous-rpertoires
RACI NE_DU_SI TE/ s e t t i ngs / , nous crons nos fichiers
dans des sous-rpertoires se trouvant uniquement sous
RACI NE_DU_SI TE/ e xt e ns i on.
Tout comme le typoscript Typo3 ou les boucles
SPIP, le langage de templating eZ Publish est unique-
ment propre au CMS. De la documentation est dispo-
nible sur ce lien : http://doc.ez.no/eZ-Publish/Techni-
cal-manual/4.x/Templates.
Surcharge dun template
Avant de nous lancer dans la programmation dun tem-
plate, il nous faut le crer. Nous allons donc crer lex-
tension de notre projet nounours et lactiver, en suppo-
sant que nous travaillons dans la socit Tartepempion.
Comme dans tout projet web ou informatique, il est vi-
vement recommand de suivre des best practices lors
de la cration de rpertoires.
Nous allons crer larborescence des sous-rper-
toires suivants :
RACI NE_DU_SI TE
> e xt e ns i on
# Nous prfxons notre extension par la premire lettre
de not r e s oc i t
> t_nounours (1)
# Rpertoire contenant les templates et autres fchiers
statiques (css, javascript, images,
etc...)
> design (2)
# Rpertoire contenant les fchiers dfnissant laffchage
du siteaccess du front-offce
> nounours_front (3)
# Rpertoire contenant les fchiers templates
> templates (4)
Nous copions ensuite le fchier RACI NE _ DU_ SI TE/
de s i gn/ s t a nda r d/ t e mpl at e s / pa ge l ayout . t pl vers (4).
Ce nouveau fichier template surcharge donc celui d-
finissant laffichage par dfaut, mais surtout il contient
le code contenu dans chaque page affiche en front-of-
fice : cest le template conteneur principal.
Pour le prendre en compte, il est ncessaire de dfi-
nir dans un fichier de configuration lexistence du rper-
toire (2). Nous crons le fichier design.ini.append.php
sous RACI NE_DU_SI TE/ e xt e ns i on/ t _nounour s / s e t t i ngs / .
RACINE_DU_SITE/extension/t_nounours/settings/design.
i ni . a ppe nd. php
De mme, nous dfnissons galement (3) en crant
le fchier site.ini.append.php sous RACI NE _ DU_ SI TE/
e x t e ns i on/ t _ nou nou r s / s e t t i ngs / s i t e a c c e s s / pl a i n _
s i t e/ .
RACINE_DU_SITE/extension/t_nounours/settings/
s i t e a c c e s s / pl a i n_s i t e / s i t e . i ni .
a ppe nd. php
Nous activons notre nouvelle extension en ajoutant la
ligne suivante au fchier RACI NE _ DU_ SI TE/ s e t t i ngs /
ove r r i de/ s i t e. i ni . a ppe nd. php.
[ Ext e ns i onSe t t i ngs ]
Ac t i ve Ext e ns i ons [ ]
ActiveExtensions[]=ezjscore
ActiveExtensions[]=ezie
ActiveExtensions[]=ezoe
ActiveExtensions[]=ezodf
# Ac t i va t i on de l a nouve l l e e xt e ns i on
Ac t i ve Ext e ns i ons [ ] =t _nounour s
Enfn, nous vrifons que tous les fchiers et rper-
toires nouvellement crs possdent les bons droits
serveur, et purgeons les caches, avec la ligne de com-
mande suivante :
$ c d RACI NE_DU_SI TE
$ php bin/php/ezcache.php --clear-all --purge
eZ Publish
phpsolmag.org/fr 45
Pour affcher notre nouveau fchier template page-
layout.tpl en front-offce, nous allons donc sur la page
daccueil http://nounours.local. Deux solutions soffrent
nous :
Nous modifons ce fchier en ajoutant par exemple
un texte lambda, et vrifons que ce dernier saf-
fche bien.
Nous activons le debug et vrifons que le fchier
est bien pris en compte : connectons-nous dans
le back-offce, puis dans la colonne de droite, acti-
vons le mode de dbogage du siteaccess du front-
offce uniquement.
capture dcran colonne_droite_activation_debug_plain_
s i t e . png
capture dcran mode_debug_on_front-offce.png
De manire gnrale, nous pouvons galement visua-
liser tous les autres fchiers templates (inclus ou pas)
pris en compte sur la page daccueil du site.
Nous allons maintenant nous atteler crer la page
en front-office dun produit. Nous allons donc crire le
fichier template correspondant en le crant dans larbo-
rescence des fichiers dans notre extension et le rendre
actif. Crons les rpertoires conteneurs et le fichier,
pour obtenir larborescence suivante :
RACI NE_DU_SI TE/ e xt e ns i on/ t _nounour s / de s i gn/ nounour s _
f r ont / ove r r i de / t e mpl a t e s / f ul l /
pr oduc t . t pl
Nous ditons ce fchier en affchant les attributs de la
classe produit :
extension/t_nounours/design/nounours_front/override/
t e mpl a t e s / f ul l / f ul l _pr oduc t . t pl
Pour activer ce fchier et lui faire correspondre la vue
full chaque contenu de type produit, nous ditons
le fchier RACI NE _ DU_ SI TE/ e xt e ns i on/ t _ nounour s /
s e t t i n g s / s i t e a c c e s s / p l a i n _ s i t e / o v e r r i d e . i n i .
a ppe nd. php (surchargeant donc override.ini) en y ajou-
tant le code suivant en dbut de fchier :
[ f ul l _pr oduc t ]
Sour c e =node / vi e w/ f ul l . t pl
Ma t c hFi l e =f ul l / f ul l _pr oduc t . t pl
Subdi r =t e mpl a t e s
Match[class_identifer]=product
En ayant au pralable vid le cache pour prendre en
compte cette nouvelle confguration ainsi que le tem-
plate ajout, nous avons en front-offce http://nou-
nours.local/Peluches/La-peluche-Mickey-Mouse :
full_produit_mickey.png
Bien sr laffchage est rustique, nous ne dtaillerons
pas le mtier de webdesign dans cet article. Pour
connatre les nombreuses possibilits de confgura-
tion, vous pouvez consulter le contenu des liens utiles
de ce chapitre.
Conclusion
Bien sr lexemple donn nest quun affichage simple
de donnes simples, bas sur une configuration simple.
Pour plus dinformations sur les possibilits de configu-
rations, nous pouvons consulter la documentation en
ligne : http://doc.ez.no.
Liens utiles :
http://doc.ez.no/eZ-Publish/Technical-manual/4.x/
Reference/Scripts/Generic/ezcache.php - La docu-
mentation sur le script de gestion du cache eZ Pu-
blish,
http://doc.ez.no/eZ-Publish/Technical-manual/4.x/
Reference/Confguration-fles/override.ini - Le sys-
tme de surcharge.
En savoir plus
Lorsque vous aurez cr votre site internet, il vous sera
utile et intressant dapprofondir les notions suivantes :
Lcriture dun workfow.
Lcriture dun module.
Lcriture dun datatype.
Lcriture dun cronjob.
La confguration multilingue ou multisite.
Le versionning.
La fonctionnalit de-commerce.
Les rles et droits.
Lextension eZ Find.
La gestion pousse du cache.
Bien dautres encore...
Vous avez accs en ligne la documentation en ligne
http://doc.ez.no, le site communautaire http://share.
ez.no, les fux http://www.planet-ezpublish.fr et http://
www.planetezpublish.org, ainsi que bien dautres sites.
JEAN-LUC NGUYEN
Jean-Luc NGUYEN dveloppe depuis plus de 8 ans en langage PHP.
Il a dbut sur eZ Publish 3.6, et est dveloppeur certif eZ Publish. Il
travaille actuellement au sein de la socit Publicis Modem, Paris.
Son site internet: www.acidre.com.
5/2011 46
Scurit
O
penBSD est un systme dexploitation libre,
sous licence BSD, driv de la famille Berkeley
System Distribution. Cest un systme de type
Unix driv directement du code de celui-ci. Plus pr-
cisment, OpenBSD comme la plupart des autres sys-
tmes dexploitation BSD est driv de la version 4.4
de BSD.
Il existe aujourdhui plusieurs variantes du systme
BSD, parmi celles-ci OpenBSD est celle qui est la
plus reconnu dans le domaine de la scurit. Ceci tout
dabord grce lincorporation dans le systme de base
dun grand nombre doutils de scurit, dautre part pour
la politique adopt par les dveloppeurs, avec notam-
ment de nombreuses phases daudit de code.
La famille BSD et la famille Linux sont diffrent techni-
quement. En effet, les noyaux BSD offre moins de fonc-
tionnalit que les noyaux Linux permettant en contre-
partie une stabilit, une performance et une scurit
bien suprieure. Ct licence, la famille BSD est sou-
mis la licence BSD permettant dutiliser les logiciel
sans restriction.
Descriptif PF
Packetfilter (PF) est le pare-feu logiciel embarqu ds
linstallation dans les systmes OpenBSD. Au mme
titre que Netfilter, il est stateful et capable de raliser
un certain nombre doprations sur les paquets du-
rant leurs traitement. Concrtement cela signifie que
PF garde en mmoire dans des tables prvues cet
effet ltat des connections (TCP par exemple) et agit
en consquence larriv dun nouveau paquet. Il sac-
compagne dun outil de contrle pfctl permettant dinte-
ragir avec PF.
Bien souvent imagin comme obscur, il existe des pro-
duits packags tels que pfsense issue de lautre grand
produit phare de la famille BSD : FreeBSD. Ce systme
permet de saffranchir de la ligne de commande et de
configurer lensemble de la scurit sur une interface
web.
PF et OpenBSD
adapt aux PME
Beaucoup de PME ont en commun des besoins de scurit et
notamment en matire de pare-feu. Il existe de nombreux choix
matriels sur le march et les UTM ont depuis plusieurs annes
inonds le march de la scurit internet. Dans cette multitude de
choix, il existe des outils Open Source en licence libre qui peuvent
parfaitement convenir aux PME, couvrir 100% de leurs besoins, tout
en tant simple configurer.
Cet article explique :
OpenBSD-systmedexploitationlibre,souslicenceBSD.
Packetflter-pare-feulogiciel.
Ce quil faut savoir :
Notionsdescurit.
Figure 1. Schma darchitecture
OpenBSD
phpsolmag.org/fr 47
galement possible dans le cadre de la haute disponi-
bilit de synchroniser les Security Associations (SA) et
les Security Policy Database (SPD) laide de sasyncd.
Dautre part, vous pourrez configurer un remote accs
utilisateur partir dOpenBSD. OpenVPN peut tre trs
utile OpenBSD pour effectuer du VPNSSL. Grce
authpf il est possible de modifier dynamiquement les
rgles de filtrage en fonction de ladresse IP dun utili-
sateur. Cela permet alors de donner un accs privilgier
tant quil reste authentifier sur le pare feu.
OpenBSD est galement interoprable avec Ker-
beros/LDAP permettant de mettre en place une au-
thentification forte. On regrette que la connexion ne
puisse se faire que par rapport un compte LDAP
et non un groupe de plusieurs utilisateurs. Toute-
fois, OpenBSD est assez puissant pour positionn la
granularit des accs et des rgles PF au niveau de
lutilisateur. Enfin, OpenBSD a fait le choix, pour des
raisons de scurit, de ne pas faire dinspection de
paquet et ne peut donc pas servir de proxy pour la
Visio ou pour la voix sur IP.
Pf et OpenBSDadapt au besoin dune PME
Pour illustrer (voir Figure 1) notre propos, prenons
lexemple dune socit qui souhaite mettre en place
une solution pare-feu. Pour une PME les besoins sont
souvent rcurrents, leurs objectifs sont avant tout
davoir une fonction de pare-feu qui ne rgule que cer-
tains flux et de pouvoir partager la connexion internet.
Pour plus de scurit, certaines PME ont besoin
dune haute disponibilit ou encore de connecter plu-
sieurs sites en IPSEC. Dans notre cas, nous prendrons
en compte que linterface vic1 est sur le LAN et linter-
face vic0 sur le WAN.
Le NAT
Tout dabord nous allons fournir une connectivit inter-
net au membre de lentreprise. Nous allons faire du
PAT sur ladresse publique du pare-feu et nous nauto-
Ce quil faut savoir
PF est activ et stateful par dfaut sur les systmes
OpenBSD. Il est capable de base de faire de la trans-
lation dadresse, du filtrage, de la normalisation, de la
gestion de QoS ou encore de la haute disponibilit na-
tive, etc Et, last but not least. PF fonctionne selon
le principe du last matching rule wins autrement dit et
pour un paquet, les rgles sont analyses une une, et
la dernire qui concerne le paquet lemporte
OpenBSD tant un produit de scurit, il est livr de
base avec les principaux modules de chiffrement tel
que le 3DES et lAES. Loutil pfctl permet deffectuer
des actions telles que :
Pfctl e # Active le fltrage
Pfctl d # Dsactive le fltrage
Pfctl ss # Affche la table dtat
Pfctl sr # Affche les rgles actives
Et bien dautres choses encore
Les possibilits de PF et outils annexes
Grce ses tables dtat internes, PF a t prvu pour
se coupler avec de nombreux outils tels que spamd
fournit nativement sur OpenBSD, ou les IPS comme
snort. Au final, tous outils qui lors dun vnement sont
capables deffectuer une commande peuvent potentiel-
lement interagir avec PF.
CARP est loutil qui permet de raliser de manire
simple de la redondance en Actif/Passif. Loutil cou-
pl avec pfsync permet de prserver les tables de
session pendant le temps de basculement. Toutefois,
il nest pas possible avec CARP deffectuer de lActif/
Actif. OpenBSD et squid sont totalement compatible et
peuvent apporter une brique de filtrage URL et proxy
web lentreprise.
Ipsecctl est capable de crer des tunnels IPsec site
site, et est interoprable avec des implmentations
constructrices telles que Cisco ou Checkpoint. Il est
Figure 2. Resultat pfsync frewall 1
Figure 3. Rsultat pfsync frewall 2
5/2011 48
Scurit
riserons aux rsidents que les ports les plus communs
(http, https, smtp, dns, ).
Editons donc le fichier /etc/pf.conf
#Dclaration des interfaces
e xt = vi c 0
lan = vic1
#Regles
## Blocagede tousblock in all
block out all
#Tout dabord nous activerons le NAT pour les fux
sortant
match out on vic0 inet from $lan:network to any nat-to
$ext
#Nous autorisons ici le protocol icmp en sortie
pass out on $ext proto icmp from $lan:network to any
#Enfn nous autorisons les requetes DNS et les fux
prcdement cit
pass out on $ext proto udp from $lan:network to any
port domain
pass out on $ext proto tcp from $lan:network to any
port {80,443,25,110,143,993,995}
Bien sr, cette confguration reste perfectible, mais
elle est nanmoins effcace pour fournir un accs in-
ternet notre PME. Nous avons ici et en quelques
lignes crer un ensemble de rgle permettant une
connectivit internet basique.
La documentation dOpenBSD, tant trs claire et ex-
haustive, nous ne dtaillerons la syntaxe. Notons tout
de mme leffort mis par les dveloppeurs afin que lou-
til bnficie dune syntaxe pratique (avec lutilisation de
tableau et de variable) et lisible facilement. Enfin vous
remarquerez que le principe du last matching rule wins
est ici appliqu : on met les rgles par dfaut en dbut
de fichier.
IpSEC
Nous utiliserons un outil fourni de base avec les sys-
tmes openBSD : ipsecctl qui permet de contrler lta-
blissement de tunnel IPSEC. Pour cela rien de plus
simple :
# Sur notre pare-feu
Ike esp from 172.16.235.0/24 to 10.0.0.0/24 peer
192.168.100.36 \
Main auth hmac-sha1 enc aes group modp1024 \
Quick auth hmac-sha1 enc aes \
psk H@kin9
# Sur la machine distante (ici une openBSD)
Ike esp from 10.0.0.0/24 to 172.16.235.0/24 peer
192.168.100.38 \
main auth hmac-sha1 enc aes group modp1024 \
quick auth hmac-sha1 enc aes \
psk H@kin9
La syntaxe est assez similaire celle de pfctl. Ici nous
avons crer en quelques ligne une confguration permettant
un tunnel IPSec de type Site site utilisant un chiffrement
reconnu tel que AES. Bien sr comme dit prcdemment
ce systme est interoprable avec plusieurs implmenta-
tions IPSec constructeurs. Il faut ensuite dmarrer isakmpd
et appliquer les changements grce loutil ipsecctl.
isakmpd K
ipsecctl -f /etc.ipsec.conf
Haute disponibilit
Pour scuriser larchitecture, nous allons secourir le
pare-feu en actif/passif laide dune seconde machine
et effectuer de la redondance. Nous nous appuierons
sur les outils CARP et Pfsync fournit de base avec
OpenBSD. Ct CARP pour la redondance, nous allons
secourir linterface Lan de notre firewall :
# sur f w 1
#Creation de linterface carp (interface virtuelle)
172.16.235.253:root#Ifconfg carp1 create
#Confguration
# on confgure une interface afn de mettre en place le
protocol Carp
#Nous protegerons les communication laide dun mot de
passe : pass4carp1
172.16.235.253:root#Ifconfg carp1 vhid 235 pass
pass4carp1 carpdev vic1 advbase
0 advskew3 state ma s t e r
172.16.235.254 netmask 255.255.255.0
#Creation de linterface carp
172.16.235.252:root#Ifconfg carp1 create
#Confguration
172.16.235.252:root#Ifconfg carp1 vhid 235 pass
pass4carp1 carpdev vic1 advbase
3 advskew30 stateba c kup
172.16.235.254 netmask 255.255.255.0
Ceci sufft mettre en place la redondance sur lin-
terface LAN (vic1) du pare-feu. Il sufft alors en se re-
portant la documentation de faire en sorte que ces
changements soient persistants. On peut galement
mettre en place la mme chose sur les interfaces Wan
sil nexiste quune sortie internet. Ct Pfsync pour la
synchronisation des tables dtats pare-feu :
!Sur fw1
Ifconfg pfsync0 syncdev vic0 syncpeer 172.16.235.252
!sur fw2
Ifconfg pfsync0 syncdev vic0 syncpeer 172.16.235.253
Ceci sufft mettre en place une synchronisation des
tables dtat, cest--dire synchronyser les informa-
phpsolmag.org/fr
tions sur le fux circulant au travers du pare feu afn
de garantir un arrt minimum pour les utilisateurs en
cas de bascule. Cette fonction remplace aisment un
boitier propritaire qui ncessitera souvent pour faire
la mme chose, lachat dune licence supplmentaire
pour accomplir une haute disponibilit avec synchroni-
sation des tables dtats. Nous visualisons alors le r-
sultat (voir Figure 2).
Attention, il est important de noter que pfsync ne syn-
chronise pas les rgles de filtrage, mais seulement la
table des tats. Pour cela, des outils tels que rsync ou
dsh peuvent vous aider effectuer ce travail.
Conclusion
Pf et OpenBSD sont des outils trs puissants permet-
tant de grer les mmes fonctionnalits quun boitier
constructeur et pour la plupart de ses besoins, de ma-
nire native. De plus le mode de dveloppement cen-
tralis assure une cohrence et une interactivit trs
pousse des outils de base de la distribution.
Loutil packet filter seul est un outil puissant qui cou-
pl avec les autres outils dOpenBSD permet de rali-
ser facilement un grand nombre de fonction qui ne sont
parfois disponible quen option sur le UTM destin au
PME. Grce sa syntaxe, le produit est simple maitri-
ser, mais pour plus de facilit, les PME peuvent utiliser
un systme ddi comme PFsense et ainsi bnficier
dune interface graphique et des mmes fonctionnalits
quOpenBSD.
DAMIEN BOLUS: EXPERT TECHNIQUE FRAMEIP
Consultant rseau scurit ToIP au sein de FrameIP. Jai men bien
un grand nombre de mission tels que des intgrations diverses de
pare-feu ou des audits de scurit. Cette diversit dans les missions
ma permis de prendre en main beaucoup de solution du march, in-
cluant des solutions Open Source, et de me confronter au besoin de
clients.
CLMENT SANNIER: CHEF DE PROJET FRAMEIP
En tant que chef de projet chez FrameIP, ma mission principale est
de conseiller les clients sur des solutions de scurit. Jaime pouvo-
ir leurs proposs diverses solutions que ce soit constructeur ou Open
Source afn de rpondre au mieux leurs besoins et leurs philoso-
phies.
Sur Internet
http://www.openbsd.org
http://www.openbsd.org/faq/pf/fr/index.html
http://www.frameip.com
http://www.pfsense.org/

Vous aimerez peut-être aussi