Академический Документы
Профессиональный Документы
Культура Документы
10/2010
Table des matières
www.phpsolmag.org
11/2010
VARIA
www.phpsolmag.org
Rédacteur en chef :
Łukasz Bartoszewicz
OUTILS
8 Accéder aux API GOOGLE en PHP
Isabelle Lupi
Couverture : Pour les besoins de son application web (site, blog, por-
Sławomir Sobczyk
tail…), il est parfois nécessaire d’accéder aux ressour-
DTP : ces stockées sur un service Google tel que YouTube,
Sławomir Sobczyk Studio2W@gmail.com
Picassa, Blogger, Documents, … Pour répondre à ce
Composition : besoin, Google offre un certain nombre d’API afin d’ex-
Sławomir Sobczyk ploiter ses services et d’intégrer les résultats à d’autres
applications. Vous verrez quels sont les services Goo-
Correction : gle qui sont accessibles par les API en PHP.
Valérie Viel, Thierry Borel, Barbara Bourdelles
PROJETS
Bêta-testeurs :
Brice Favre, Valérie Viel, Cyril David,
Christophe Milhau, Alain Ribault, Stéphane Guedon,
Eric Boulet, Mickael Puyfages, Christian Hernoux, 12 Développer un centre d’appel avec
Isabelle Lupi, Antoine Beluze, Timotée Neullas,
Yann Faure, Adrien Mogenet, Jean-François Montgaillard,
Asterisk et vtigerCRM
Turmeau Nicolas, Jonathan Marois, Wilfried Ceron, Randriamifidy Bezama Marolahy
Wajih Letaief, François Van de Weerdt, Eric Vincent, Dans ce premier article de notre série, nous allons
Franck Michaël Assi, Francis Hulin-Hubard,
Nicolas Dumas, David Michaud. parler principalement d’Asterisk. Asterisk est un PBX
(Private Branch eXchange ou autocommutateur télé-
Les personnes intéressées par la coopération phonique Privé) Open Source destiné aux entrepri-
sont priées de nous contacter : ses et vtigerCRM est l’un des meilleurs CRM (Custo-
editor@phpsolmag.org
mer Relationship Management ou Gestion de relation
client), en Open Source. Ils sont utilisés par de nom-
Publicité :
publicite@software.com.pl breux projets Open Source pour les centres d’appel
comme ELASTIX.
Pour créer les diagrammes on a utilisé le programme
DOSSIER
17 Web sur iPhone
Jean Tatareau
AVERTISSEMENT Dans cet article, nous verrons pourquoi
Les techniques présentées dans les articles
ne peuvent être utilisées qu’au sein des réseaux et comment aborder le développement
internes. La rédaction du magazine n’est pas sur smartphone et en particulier sur iPhone.
responsable de l’utilisation incorrecte des techniques
présentées. L’utilisation des techniques présentées peut Nous évoquerons les contraintes et les oppor-
provoquer la perte des données ! tunités qu’offre ce développement spécifique.
11/2010
Table des matières
PRATIQUE
manipulation des données de la base sont réalisées
en SQL. Dans cette série d’articles vous apprendrez
26 Internationaliser une application CakePHP le langage SQL ainsi que les bases nécessaires pour
Pierre Martin communiquer avec une base de données à partir
L’internationalisation d’une application ou d’un site web d’un script PHP.
consiste à fournir un contenu dans différentes langues
en permettant à l’utilisateur de changer de langue sim-
plement, mais aussi d’améliorer son référencement lo-
cal afin de toucher plus de visiteurs. Cela implique bien
souvent une gestion différente des données dynamiques
en base de données, ainsi que l’externationalisation des
chaînes de caractère contenues dans l’application.
FICHE TECHNIQUE
34 Introduction à l’industrialisation de PHP
William Durand
PHP est un langage de programmation largement ré-
pandu, probablement le plus utilisé en programmation
web. Ce que bon nombre de développeurs PHP ne
savent pas, c’est qu’il dispose d’une pano-
plie d’outils permettant une utilisa-
tion confortable de celui-ci en
situation professionnelle.
Cet article présente un
cycle incrémental
d’industrialisa-
tion possible.
Actualités
11/2010
<<TOP>>
<<SHORT_NEWS>>
<<BODY>>
KERNEL
www.phpsolmag.org
Outils
Accéder
aux API GOOGLE en PHP
Pour les besoins de son application web (site, blog, portail…),
il est parfois nécessaire d’accéder aux ressources stockées
sur un service Google tel que Youtube, Picassa, Blogger,
Documents, … Pour répondre à ce besoin, Google offre
un certain nombre d’API afin d’exploiter ses services
et d’intégrer les résultats à d’autres applications.
P
Protocol se trouve à l’url http://code.google.com/intl/fr/
blog, portail…), il est parfois nécessaire d’ac- apis/gdata/docs/directory.html). En voici quelques uns.
céder aux ressources stockées sur un service
Google tel que Youtube, Picassa, Blogger. Documents, Google Blogger
… Pour répondre à ce besoin, Google offre un certain Google Blogger (http://www.blogger.com) est une pla-
nombre d’APIs afin d’exploiter ses services et d’intégrer teforme complète de publication de blogs. L’API Blog-
les résultats à d’autres applications. ger Data (http://code.blogger.com) permet d’interroger,
Certaines de ces APIs s’appuient sur le protocole de de visualiser et mettre à jour le contenu du blog via une
données Google Data Protocol (http://code.google.com/ application cliente autre.
intl/fr/apis/gdata). Celui-ci est largement inspiré de l’ar-
chitecture REST, conçue pour manipuler les données Youtube
sur internet. Il supporte actuellement AtomPub et JSON Accessible à l’adresse http://youtube.com, Youtube est
pour représenter et véhiculer les informations. Comme une plateforme de partage de vidéos et offre en outre
tout protocole de données, Google Data Protocol s’in- toute une panoplie de fonctionnalités pour commen-
terface avec divers langages du Web, tels que Java, ter et annoter les vidéos. L’API YouTube Data (http://
.NET, Perl, Python ou PHP. C’est à travers ce dernier code.google.com/intl/fr/apis/youtube) permet de créer,
langage que nous allons découvrir quelques fonction-
nalités.
11/2010
API GOOGLE
Picasa
Picasa (http://picasaweb.google.com) est une platefor-
me de partage d’albums d’images et de photos. L’API
Picasa Web Albums Data (http://code.google.com/intl/
fr/apis/picasaweb) autorise la gestion des albums, des
images et des photos.
Google Calendar
Google Calendar (http://www.google.com/calendar)
permet de mettre en ligne et de partager son agenda,
où un agenda événementiel. L’API Calendar Data API
(http://code.google.com/intl/fr/apis/calendar) autorise
toute la gestion et la visualisation de votre agenda dans
Figure 3. Portail du l’api Picassa Web Album Data
votre application. Figure 3. Portail du l’api Picassa Web Album Data
Google Documents
Google Documents (http://docs.
google.com) autorise la mise en li-
gne et le partage de documents. Il
est possible de partager ces docu-
ments avec tout le monde ou de
spécifier les emails autorisés. Il
est également possible d’autoriser
spécifiquement et individuellement
soit la visualisation, soit la modifi-
cation du document. Par ailleurs,
les documents peuvent être parta-
gés soit avec leur format natif, soit
en tant que pièce attachée.
L’API Google Documents List
(http://code.google.com/intl/fr/
apis/documents) s’interface avec
ce service et permet de créer,
partager, uploader et modifier les
documents. Lorsqu’il s’agit plus
spécifiquement de feuilles de
Figure 4. Portail du l’api Google Book Search
calcul, l’API Google Spreadsheets Figure 4. Portail du l’api Google Book Search
www.phpsolmag.org
Outils
Installer la librairie
Pré-requis indispensable et commun à toutes les apis, il
faut télécharger la librairie à l’adresse http://framework.
zend.com/download/gdata. Dans le code PHP, il faudra
donc mettre dans l’entête pour charger la librairie :
10 11/2010
API GOOGLE
Figure
Figure 6. Portail
6. Portail des Documents
des api Google api Google Documents
Affichage de résultats
Les résultats de même nature peuvent ainsi être af-
fichés au sein d’un même type de boucle. Ainsi, par
exemple, pour les deux services interrogés ci-dessus,
la boucle d’affichage sera la suivante : Isabelle Lupi
Spécialisée dans les domaines de la gestion documentaire, du tra-
foreach($resultats->entries as $document) { itement du langage naturel et du référencement. Travaille depuis
print $document->title . "\n"; plus de 10 ans dans ce dernier domaine et a créé, début 2007, b-find,
} sa propre société spécialisée dans le domaine du référencement.
www.phpsolmag.org 11
Projets
Développer
un centre d’appel avec Asterisk
et vtigerCRM
Asterisk est un PBX (Private Branch eXchange
ou autocommutateur téléphonique Privé) open source destiné
aux entreprises et vtigerCRM est l’un des meilleurs CRM
(Customer Relationship Management ou Gestion de relation
client), en Open Source. Ils sont utilisés par de nombreux projets
Open Source pour les centres d’appel comme ELASTIX.
D
ans ce premier article de notre série, nous al- occasionnels et la conversion entre les formats, codecs
lons parler principalement d’Asterisk. En pre- et protocoles.
mier lieu, Asterisk est un système de téléphonie Les canaux traitent toutes les entrées/sortie pour
pour les entreprises. C’est un logiciel libre permettant voix,vidéo, texte. Chaque canal représente une tech-
la mise en place d’un autocommutateur logiciel. Créé nologie ou un protocole spécifique c’est à dire SIP, IAX
à l’origine par Mark Spencer de Digium et qui suppor- ou autre protocole, chacun de ces protocoles se trou-
te plusieurs plateformes (Linux, Windows, BSD, …). ve dans son propre module chan_sip.so, chan_iax.so
Asterisk supporte la majorité des protocoles (SIP, etc,
IAX, H.323, SCCOP,...) et supporte aussi la majorité Le module Fonctions et Application sert l’exécution
des codecs audio et vidéo (G711, G723, G726, Speek, d’unités fonctionnelles dans le système par exemple
GSM,etc …). Avec Asterisk on peut faire plusieurs types les VoiceMail, Lecture des fichier enregistrés ou la
d’applications.
Au cours de cette article, nous verrons :
12 11/2010
Asterisk
www.phpsolmag.org 13
Projets
14 11/2010
Asterisk
asterisk.conf
Listing 5. Configuration suite
asterisk.conf est le fichier de configuration meta ou
[general]
format=wav49|gsm|wav
master. Il indique à Asterisk où chercher (ou com-
serveremail=asterisk ment créer) d’autres structures et fichiers de con-
attach=yes
skipms=3000 figuration. Asterisk trouve généralement asterisk.
maxsilence=10 conf dans /etc/asterisk sauf si vous lui donnez une
silencethreshold=128
maxlogins=3 indication contraire quand vous démarrez asterisk
language=fr (l’option -C).
emaildateformat=%A, %d %B %Y a %H:%M:%S
emailsubject=[ASTERISK] Nouveau message dans la boite Ce fichier a rarement besoin d’être édité. /etc/aste-
${VM _ MAILBOX} risk/asterisk.conf
emailbody=Bonjour ${VM _ NAME},\n\n\tLe numéro ${VM _
CALLERID} a tenté de vous joindre sans succčs le
${VM _ DATE}.\nCette personne vous a laissé un message de $$
pagerfromstring=[PBX Asterisk]
sip.conf
pagersubject=Nouveau message vocal Contient les informations de configuration pour le canal
pagerbody=Nouveau message de ${VM _ DUR} secondes
dans la boîte ${VM _ MAILBOX} laissé le ${VM _ DATE} SIP d’Asterisk dans la section [general]. Il contient aussi
par ${VM _ CALLERID}. la configuration des téléphones SIP associés. Contient
[default]
1001 => 1002,Poste 210, marolahy@gmail.com la configuration pour tout fournisseur de service SIP.
/etc/asterisk/sip.conf
www.phpsolmag.org 15
Projets
exten dit au parseur d’Asterisk que c’est une exten- Configurer un Soft-Phone
sion. J’utilise Pagoline, mais il existe d’autres logiciels. Dans le
menu “Accounts”, vous indiquez les champs suivants :
=> : Manière dont Asterisk identifie un objet.
• User : 1002.
6001 : Nombre d’extension (numéro à composer), • Password : 1001 (mot de passe md5).
1 : La priorité (le numéro de séquence pour cette • Serveur : l’IP ou le domaine de votre serveur.
extension), Dial(SIP/pangoline|30 : Ceci demande
à Asterisk d’essayer de faire sonner le matériel SIP Dans le prochain tutoriel, nous allons installer, configu-
appelé pangoline pendant 30 secondes. rer VtigerCRM et nous allons faire une petite communi-
cation entre les deux systèmes. Dans le prochain tuto-
Créer une boite vocale riel nous allons installer le CRM vtiger-CRM et le faire
La boïte vocale sous Asterisk est configurable depuis le interagir avec Asterisk. Nous verrons ensuite comment
fichier /etc/asterisk/voicemail.xml. Le bloc général per- créer un nouveau composant pour ce CRM et enfin
met d’établir comme son nom l’indique les paramètres créer un script PHP pour Asterisk.
généraux. L’attribut attach permet d’attacher un fichier
son au mail envoyé lors de la réception d’un nouve-
au message vocal. maxlogins raccroche lorsqu’un uti- Randriamifidy Bezama Marolahy
lisateur se trompe trois fois de mot de passe. Le reste L’auteur travaille en tant que consultant ntic ( Nouvelles Techno-
semble logique. La ligne importante est celle du bloc logies de l’Information et de la Communication) au sein de Team-
default : Well Système une SSII spécialisée dans le développement web
et d’applications sur la ToIP (Téléphonie over Internet Protocol). Il
• 1001 : identifiant de la boite vocale. réalise plusieurs applications web et d’applications internet riche.
• Poste 210 : un nom plus propre. Passionné de nouvelles technologies, il cherche toujours à amélio-
rer ses compétences en tant que développeur et administrateur
marolahy@gmail.com : adresse où envoyer la notifica- système.
tion d’un appel. Pour le contacter veuillez envoyer un mail à marolahy@gmail.com.
16 11/2010
Dossier
Web
sur iPhone
‘J’ai toujours rêvé d’un ordinateur qui soit aussi facile à utiliser
qu’un téléphone. Mon rêve s’est réalisé : je ne sais plus comment
utiliser mon téléphone.’ Bjarne Stroustrup (auteur du C++).
Nous verrons pourquoi et comment développer sur smartphone
(iPhone). Nous évoquerons les contraintes et les opportunités
qu’offre ce développement spécifique.
www.phpsolmag.org 17
iPhone
function setOrientation() {
Les particularités de l’iPhone var orientation = Math.abs(window.orientation) === 90 ?
Ce qui n’est pas : 'paysage' : 'portrait';
var classOrient = document.body.className;
classOrient = classOrient.replace(/portrait|paysage/,
• le Flash et Java sont proscrits, orientation);
document.body.className = classOrient;
• nombre de pages ouvertes simultanément limité à huit, }
• poids de la page Web d'un maximum de dix Mo, Listing 4. Liste HTML à styler avec CSS
• pas de format GIF animé,
<html>
• Javascript limité à cinq secondes et à dix Mo d'allo- <head>
cation, <link rel="stylesheet" href="screen.css" type="text/css" />
<title>Php sol mag</title>
• copier, couper, coller disparaît, </head>
<body>
• pas de drag and drop, <div id="container">
• pas de clique droit, <div id="header">
<h1><a href="./">PHP Solution</a></h1>
• pas de survol (hover), <div id="utility">
• pas de sélection possible en général. <ul>
<li><a href="about.html">A propos</a></li>
<li><a href="auteur.html">Auteurs</a></li>
Particularités pour les événements :
</ul>
</div>
<div id="nav">
<ul>
• Mouseover et Mousemove ne sont pas pris en compte, <li><a href="vieux _ magazines.html">Anciens
• Keypress, Keyup et Keydown dans un textarea uni- magazines</a></li>
<li><a href="Abonnement.html">Abonnement</a></li>
quement, <li><a href="contact.html">Contact</a></li>
• Click, Mousedown et Mouseup ont un comporte- </ul>
</div>
ment étrange (à éviter), </div>
<div id="content">
• Doubleclick n'est pas pris en compte. <h2>A propos</h2>
<p> PHP solutions magazine est un journal consacré à...
</p>
Il faut comprendre que la souris a été chassée par une </div>
interaction plus charnelle (les doigts), et c'est peut-être <div id="sidebar">
<img alt="Dernier numero"
pourquoi le rapport des utilisateurs avec leur interface src="images/dernierNumero.png"
<p>Le dernier numéro est paru...</p>
est plus affectif. </div>
La géométrie : <div id="footer">
<ul>
<li><a href="contact.html">Contact</a></li>
<li><a href="about.html">A propos</a></li>
• en mode portrait, <li><a href="auteur.html">Auteurs</a></li>
surface affichable 320 X 480 pixels soit 320 X </ul>
<p class="subtle">PHP solution magazine copyright</p>
416 sans la barre d'URL </div>
• en mode paysage. </div>
</body>
surface affichable 480 X 268 pixels soit 480 X </html>
208 sans la barre d'URL
18 11/2010
Dossier
function toggleMenu() {
$('#header ul').toggleClass('hide'); On peut soit le détecter en JavaScript ou en PHP.
$('#header .leftButton').toggleClass('pressed'); Si le mobile est identifié comme iPhone, on fait
}
} une redirection sur un répertoire spécifique à ce
mobile.
www.phpsolmag.org 19
iPhone
Item Valeur
if( navigator.userAgent.match(/iPhone/i)
Hauteur cadre (ligne du bas incluse) 44px
){document.location= "/dirPourIphone/";}
Largeur cadre 320px (portrait),480px
(paysage)
Détection en PHP :
Police Helvetica, 20pt bold
On utilise la variable globale $_SERVER[‘HTTP_ Couleur police Black
USER_AGENT] Ligne horizontale (entre les cellules) #d9d9d9 (RGB=217,
217, 217)
if (stristr($_SERVER['HTTP_USER_AGENT],"iPhone") Padding gauche 10px
header("location:/dirPourIphone/"); Padding bas 14px
Hauteur controle 29px
Sélection de la feuille de style CSS Control alignement droit 10px
La séparation des feuilles de style se conforme au prin-
Control rectangle arrondi 7 degrés
cipe DRY (Don’t Repeat Yourself) ainsi qu’à une logi-
que économique singularisée par la bande passante, Control texte Helvetica, 12pt
en évitant de surcharger avec des instructions inutiles Couleur de fond White
ou inadaptées. Il est possible que lors des émulations
Tableau 2. Zones de texte à bords arrondis
sur un navigateur, celui-ci tienne compte de la largeur
réelle de l’écran, dans ce cas, il faut remplacer le para- Item Valeur
mètre du média max-device-width par max-width. Cell height 44px
Maintenant, si on utilise Safari sous IPhone, ce der- Rectangle coin arrondi avec angle 10px × 10px angle (-we-
nier considère la page en 980 pixels et affiche une pa- bkit-border-radius:10px)
ge miniaturisée. C’est pourquoi il faut préciser au navi- Rectangle arrondi marge gauche 10px
gateur Safari mobile le paramètre user-scalable=no et droite
dans la head de la page : Rectangle arrondi marge haut et bas 17px
Horizontal lines (entre les cellules) #d9d9d9 (RGB=217, 217,
<meta name"viewport" content="user-scalable=no, 217)
width=device-width" />
Police étiquette Helvetica 17pt, bold
Couleur de la police étiquette #4c566c (RGB=76, 86,
Ce tag meta est uniquement reconnu par Safari mobile. 108)
Police de la cellule Helvetica 17pt, bold
Détection de l’orientation
L’iPhone peut se manipuler horizontalement (mode Couleur de la police de la cellule Black
paysage) et verticalement (mode portrait). Une maniè- Position du texte dans la cellule 10px du côté gauche,
re de faire si l’on désire affiner une feuille de script en 14px à partir du bas
fonction de l’orientation de la page, est d’indiquer à la Couleur du fond #c5ccd3 (RGB= 197,
balise body une classe d’orientation telle que <body 204, 211)
class="portrait"> (voir Listing 2)
Tableau 3. Zones de saisies
En JavaScript, on ajoute les écouteurs d’événement
sur les évènements onload et onorientationchange Dimension de l’élément visé par Taille recommandée
(voir Listing 3). Le code JavaScript affecte la classe de un doigt
la balise body. Hauteur de l’élément 40px (min. 29px)
Largeur de l’élément Min. 30px
Style de base iPhone
Sélection, entrée hauteur 30px
Le style de base à adopter pour faire une application
Hauteur d’une cellule de liste sélec- 44px
Web conforme en termes de visualisation et d’ergono-
tionnable
mie est décrit dans la feuille CSS du Listing 3. Les don-
Espace entre les éléments 20px
nées sont le résultat de l’observation des applications
Apple sous iPhone. Il est nécessaire dans un premier
temps, pour des raisons d’ergonomie, de ne pas déso- avec une liste dont les éléments sont sélectionnables.
rienter l’utilisateur avec des nouveaux codes visuels de Le bouton de menu est piloté par du JavaScript (voir
façon à rendre son expérience agréable. Listing 5).
Le style, le look and feel, iPhone peut être celui-ci La littérature donne d’autres indications techniques du
du Listing 4 pour un fichier html présentant un menu design iPhone. Voir les Tableau 1, Tableau 2 et Tableau 3.
20 11/2010
Dossier
iPhone et AJAX
L’avantage de AJAX dans une application dédiée au
smartphone prend tout son sens. Le code n’est pas dif-
férent d’une requête classique AJAX, mais permet d’ap-
peler uniquement la réponse du serveur nécessaire, ce
Figure 2. Géométrie iPhone qui économise la bande passante en terme de volume
et de vitesse. En effet, une application web sur smart-
Présentation de jQTouch phone est à rapprocher des contraintes imposées par le
JQTouch est une librairie JavaScript qui propo- logiciel embarqué.
se tous les éléments nécessaires au développe-
ment d’applications mobiles. D’autres librairies iPhone et les bases de données
existent et sont très plébiscitées dans la littérature Les navigateurs sur les mobiles, en particulier Safari,
comme iUI ou WebApp.Net, mais il semble qu’elles autorisent la permanence des données. Quid novi? Il
comportent des bugs importants, peut-être vaut-il existe depuis longtemps les cookies et les variables
mieux attendre les versions suivantes. Ô tempora, de sessions. Il peut être nécessaire de passer la limite
Ô mores! des cookies en raison de leurs tailles et de leurs ac-
JQTouch s’appuie sur le moteur de rendu WebKit qui cessibilités trop faciles, et les sessions ne sont là que
est utilisé par les navigateurs Safari, Google et Chrome le temps de la session web. Pour palier à cela, il exis-
et qui provient des librairies KJS et KHTML du projet te d’une part deux objets JavaScript localStorage
KDE. jQTouch est un plugin de jQuery, cela signifie qu’il et sessionsStorage et d’autre part la base de don-
faudra charger jQuery. La version Beta 2 du 25 octobre nées SQL locale (SQLite) propre au navigateur, ac-
2010 s’appuie sur jQuery 1.4.2. Ce plugin est souple cessible par JavaScript. L’intérêt premier est d’avoir
pour accepter la modification de ses thèmes et suppor- une base de données avancée de type SGBD em-
te d’autres plates-formes que iPhone comme Android, barquée, ce qui évitera la sollicitation excessive de
ce qui est un gage d’efficience. la bande passante ainsi que des temps de réponse
La bibliothèque jQTouch doit être appelée après longs rédhibitoires. La base de données permet le
jQuery. Le thème CSS jqtouch.min.css avant les CSS questionnement SQL, les transactions, les rollbacks
spécifiques à la page pour profiter du cascading. en cas d’échecs, etc.
JQTouch simplifie la détection d’événements spé- Il est à remarquer que pour les puristes, que l’implé-
cifiques comme les glissées (swipe) et les frappes au mentation de la base de données repose sur SQLite ce
doigt sur l’écran (tap). Ces événements sont intercep- qui n’est pas acceptable pour une normalisation et en
tés par une méthode callback. ce moment le W3C est dans une impasse.
www.phpsolmag.org 21
iPhone
22 11/2010
iPhone
www.phpsolmag.org 23
Dossier
La sécurité
des smartphones
Cet article présente d’une manière générale la sécurité
des smartphones dans un contexte professionnel.
Pour ce faire, nous verrons d’abord qu’il existe plusieurs
systèmes d’exploitation. Nous nous intéresserons ensuite
à leurs faiblesses et à la façon de palier ces faiblesses.
es smartphones connaissent un boom plané- Nous allons nous pencher sur la sécurité de ces systè-
24 11/2010
Smartphones
Autre problème majeur : les utilisateurs sont très Avertir tout de suite le service informatique de
peu sensibilisés aux bonnes pratiques d’utilisation des l’entreprise.
smartphones. Peu d’entre eux pensent à activer un co- Couper l’accès VPN à l’entreprise pour l’utilisa-
de de protection pour restreindre l’accès à leur télépho- teur ayant perdu son smartphone.
ne. Un élément parmi tant d’autres qui rend les don- Modifier les mots de passe d’accès au système
nées du smartphone très facilement accessibles. d’information.
Un simple câble USB peut également suffire à dé-
rober les données d’un smartphone. En réalité, aucune Ce ne sont évidemment que des exemples, bien d’autres
session d’utilisateur, ni aucun mot de passe n’empê- actions doivent être entreprises dans un tel cas.
chent l’intrusion au sein du système. Prenons l’exem-
ple d’un iPhone : seul un mot de passe de quatre chif- – Utiliser des antivirus pour smartphones. Des édi-
fres permet le vérouillage, et donc le dévérouillage de teurs tels que Norton ou encore Kaspersky déve-
l’écran. Dans ces conditions, déjouer la sécurité d’un loppent des antivirus pour smartphone.
iphone s’avère relativement facile. – Appliquer des solutions de chiffrement pour mobile.
– Utiliser un firewall pour mobile. On peut ici citer Mo-
Les risques bile Firewall pour Windows Mobile ou encore Fi-
La compromission d’un smartphone peut être dange- rewall IP pour l’iPhone.
reuse. En effet, prenons l’exemple d’un salarié d’une – Mettre à jour les logiciels et systèmes afin de palier
entreprise X qui synchronise son smartphone sur un uti- les éventuelles failles.
lisateur personnel infecté. Le smartphone professionnel
se trouve alors infecté. Il suffit ensuite que ce salarié Néanmoins, les solutions de sécurité pour smartphones
synchronise son smartphone sur son ordinateur profes- présentent encore de nombreuses faiblesses. En effet,
sionnel pour que ce dernier soit infecté. Cela pourrait certains ne sont pas capables de reconnaître certains
alors donner accès au réseau de l’entreprise à un at- virus/spyware très répandus sur la toile.
taquant.
Conclusion
Comment sécuriser les smartphones Les smartphones se répandent de plus en plus, dans
Après avoir étudié les faiblesses des smartphones, il les sphères aussi bien professionnelles que privées.
convient de passer en revue les différents moyens de Mais ils présentent de nombreuses faiblesses. De nom-
les sécuriser. Tout d’abord, nous tenons à préciser que breux moyens, techniques et fonctionnels existent pour
le but premier des smartphones est une utilisation per- améliorer leur sécurisation. Ils représentent une base
sonnelle. En ce sens, l’aspect sécurité n’a donc pas été intéressante, mais pas encore suffisante pour affirmer
privilégié par les développeurs bien que les nouvelles que les smartphones disposent du niveau de sécuri-
versions d’OS l’améliorent grandement. En effet, de té requis pour être intégrés à l’environnement critique
plus en plus de sociétés s’interrogent et réalisent des d’une entreprise.
analyses de risques car l’utilisation des smartphones en D’abord développés pour le consommateur lamb-
entreprise est en passe de devenir incontournable. da, les smartphones n’ont pas été prévus pour un
Afin de sécuriser au mieux les smartphones, voici usage professionnel. Si vous l’utilisez dans un contex-
quelques bonnes pratiques à suivre : te professionnel, prenez garde à optimiser la sécuri-
sation de vos données afin d’éviter toute fuite d’infor-
– Utiliser une bonne politique de mot de passe. mations.
Concrètement une bonne politique de mot de pas-
se respecte les règles suivantes :
Les mots de passe doivent disposer d’au moins
huit caractères en combinant lettres (a-z), chif-
fres (0-9) et caractères spéciaux ($, #, @, etc.).
Les mots de passe triviaux tels que les dates de
naissances, prénoms, noms communs et mots-
clés en relation avec l’application (IPM, douane,
etc.) sont proscrits.
– Protéger l’accès à l’entreprise via un tunnel VPN.
– Établir des procédures fonctionnelles en cas de Tony Fachaux
perte ou de vol d’informations afin d’éviter de gra- L’auteur travaille en tant que consultant sécurité pour la société LE-
ves conséquences pour l’entreprise. Cela peut être XSI (Laboratoire d’EXpertise en Sécurité Informatique). Il se passion-
une série d’actions à effectuer auprès du service in- ne pour toutes les problématiques liées à la sécurité dans un conte-
formatique de la société telles que : xte professionnel.
www.phpsolmag.org 25
Fiche technique
Introduction
à l’industrialisation de PHP
PHP est un langage de programmation largement répandu,
probablement le plus utilisé en programmation web. Ce que
bon nombre de développeurs PHP ne savent pas, c’est qu’il
dispose d’une panoplie d’outils permettant une utilisation
confortable de celui-ci en situation professionnelle. Cet article
présente un cycle incrémental d’industrialisation possible.
’industrialisation de PHP c’est le processus de fa- dification dans votre schema.yml (le schéma qui repré-
26 11/2010
Industrialisation de PHP
Les tests d’intégration forment une troisième famille de Attention, la rédaction des tests unitaires ne sera pas
tests. Ils visent à tester la cohésion de l’application lors- traitée dans cet article. Passons donc aux tests fonc-
qu’on y ajoute de nouvelles fonctionnalités, modules, tionnels.
etc. Symfony embarque un mini framework de tests fonc-
tionnels. Celui-ci permet de faire des tests qualifiés de
Des outils pour les tests ! techniques. En d’autres termes, nous allons tester des for-
Pour tester une application, il faut avoir les outils qui mulaires, des navigations de pages et autres mais sans
vont bien et en PHP, il y en a rassurez-vous. Voici pour autant profiter d’un vrai rendu et de toutes les interac-
deux librairies incontournables pour nos tests uni- tions possibles avec un vrai navigateur. En effet, la clas-
taires : se sfBrowser de Symfony ne fait que des requêtes HTTP
sans possibilité de tester les requêtes AJAX par exemple.
• Lime : framework de tests embarqué dans le fra- Pour cela, il existe un outil très pratique nommé :
mework Symfony 1.x ; Selenium. C’est une application disposant de plusieurs
• PHPUnit : semblable à JUnit en Java, il tend à de- éléments dont un plugin pour Firefox permettant d’enre-
venir le framework principal de tests pour PHP. Je gistrer un scénario de tests et de le rejouer par la suite.
ne peux que vous le recommander. Ce dernier vous C’est puissant puisque, une fois enregistré, nous pou-
permettra de profiter de sur-couches issues du vons tester à peu près tout ce que l’on souhaite et le re-
monde Java pour vos développements PHP com- jouer sur plusieurs navigateurs sans souci. Vous voyez
me nous allons le voir par la suite. aisément l’intérêt ?
www.phpsolmag.org 27
Fiche technique
En complément, nous avons le test de couverture de de prise en main notamment par le biais d’un paquet
code. Ce test quantifie le code testé avec les tests uni- officiel Debian.
taires, autrement dit l’efficacité de ces tests. Cette cou- Hudson (Figure 5) quant à lui est très simple, doté
verture se mesure avec Xdebug couplé à l’un des deux d’énormément de plugins et, bien qu’outil Java, très uti-
frameworks de tests énoncés ci-avant. lisé dans le monde PHP professionnel.
Il nous est possible de faire des tests unitaires Un serveur CI se connecte à un gestionnaire de ver-
et fonctionnels mais leurs exécutions restent manuel- sions et possède la capacité d’effectuer une série de tâ-
les. Il serait bon d’affranchir nos développeurs du fait de ches périodiquement. On pourra, par exemple, choisir
lancer nos tests. Il existe des outils pour cela, regrou- de lancer nos tests après chaque commit ou à interval-
pés autour du terme intégration continue. le de temps spécifié. Nous reviendrons sur les gestion-
naires de versions dans la dernière partie de cet article.
L’intégration continue Brancher nos tests unitaires et fonctionnels est très
Continuous Integration (CI) est l’action d’automatiser simple puisque Lime et surtout PHPUnit reprennent le
les tests et de les lancer périodiquement. Le logiciel format de sortie de JUnit, une référence en matière de
employé est appelé serveur d’intégration continue, en tests unitaires Java.
voici deux : Cependant, le vocabulaire est peu commun, il fau-
dra d’abord se familiariser avec le terme build qui signi-
• phpUnderControl : qui utilise en sous-couche fie étape de création. Autrement dit pour une application
CruiseControl, le serveur CI Java ; PHP, la récupération des sources depuis un gestionnai-
• Hudson : directement emprunté à Java. re de versions, l’exécution des tests, des analyses sur
le code, la remontée d’indicateurs ou métriques et l’in-
phpUnderControl (Figure 4) est très sexy mais com- tégration avec d’autres outils extérieurs que je présen-
pliqué à installer. Un projet vise à le rendre plus simple terai plus loin.
28 11/2010
Industrialisation de PHP
www.phpsolmag.org 29
Fiche technique
Mais que sont ces analyses sur le code ? C’est l’ob- complexité cyclomatique, le nombre de classes héritées
jet de ma prochaine partie. et bien d’autres. Notez que PHP_Depend est l’équiva-
lent PHP de JDepend en Java.
Analyser pour mieux régner On dispose également de PHP Mess Detector qui
Lorsque notre serveur CI est fonctionnel, il est intéres- est proche de PHP_Depend et qui lui va détecter les
sant de lui ajouter des fonctionnalités qui seront lan- portions de code mort ou encore le nombre excessif de
cées après l’exécution de nos tests et la réussite de paramètres pour une méthode. On utilisera le plugin
ceux-ci. Analyser le code source est une bonne idée. Il DRY d’Hudson pour visualiser les résultats.
existe trois niveaux d’analyse : Troisième et dernier outil, PHP Copy/Past Detector
qui va détecter la duplication de code. Un must have
• L’analyse lexicale : pour le code redondant, les er- lorsque l’on suit la logique Don’t Repeat Yourself !
reurs dans le suivi du guide de style ; Analyser notre code au niveau byte code est plus
• L’analyse syntaxique : pour les erreurs de paramè- compliqué, les outils sont moins connus et je ne m’y at-
tres, code mort, non respect de règles Objet ; tarderai pas. Pour les intéressés, voyez Vulcan Logic
• L’analyse du bytecode PHP (opcode). Disassembler, Bytekit et Bytekit-cli.
L’ensemble des outils présentés dans cette partie
Au niveau lexical, on dispose de PHP_CodeSniffer qui ne nous servent à rien si l’on ne peut pas exploiter les
va vérifier le respect de règles prédéfinies. L’utilisation indicateurs retournés. Pour visualiser les informations,
courante est d’écrire une série de règles définissant son on peut utiliser directement Hudson ou phpUnderCon-
guide de style et de valider notre code source. Si une trol mais il existe également Sonar pour PHP (Figure
portion de code ne respecte pas notre guide, PHP_Co- 6). Sonar est l’arme ultime en Java pour l’analyse de
deSniffer l’indiquera dans son rapport. Couplé à Hud- code et il est porté pour PHP, foncez ! Certaines métri-
son et à son plugin Checkstyle, nous aurons directe- ques (celles de PHP_Depend par exemple) ne seront
ment l’information. C’est très pratique lorsque plusieurs pas très explicites dans Hudson, il sera préférable de
développeurs travaillent sur un même projet et dispo- connecter PHP_Depend à Sonar et Sonar à Hudson.
sent du guide de style de l’entreprise. Dernier outil de cette partie : phpDocumentor qui
Au niveau syntaxique, PHP_Depend va nous four- va générer une documentation complète de l’applica-
nir des informations sur le niveau d’abstraction de no- tion en se basant sur les commentaires dans les sour-
tre code, le nombre moyen de méthodes par classe, la ces. Bien évidemment, si des erreurs sont présentes
30 11/2010
Industrialisation de PHP
Sur Internet
• http://symfony-project.org/ : Site officiel du framework Symfony,
• http://www.phpunit.de/ : Site du projet PHPUnit,
• http://seleniumhq.org/ : Site officiel de Selenium,
• http://www.xdebug.org/ : Site officiel de Xdebug,
• http://phpundercontrol.org/ : Site du projet phpUnderControl,
• http://hudson-ci.org/ : Site officiel du serveur d’intégration continue,
• http://pear.php.net/package/PHP_CodeSniffer : Page du projet PHP_CodeSniffer,
• http://pdepend.org/ : Site officiel de PHP_Depend,
• http://phpmd.org/ : Site officiel de PHP Mess Detector,
• https://github.com/sebastianbergmann/phpcpd : Github du projet PHP Copy/Past Detector,
• http://derickrethans.nl/projects.html : Documentation de Vulcan Disassembler Logic,
• http://www.bytekit.org/ : Site officiel de Bytekit,
• https://github.com/sebastianbergmann/bytekit-cli : Github du projet Bytekit-cli,
• http://sonar-php.sqli.com/ : Démo de Sonar pour PHP,
• http://www.phpdoc.org/ : Site officiel de phpDocumentor,
• http://git-scm.com/ : Site officiel de l’excellent gestionnaire de versions,
• https://github.com/capistrano/capistrano : Github du projet Capistrano,
• http://symfony-project.org/ : Site officiel de l’ORM PHP Doctrine,
• http://www.mantisbt.org/ : Site officiel du bug-tracker MantisBT,
• http://www.bugzilla.org/ : Site officiel du Bugzilla,
• http://www.industrialisation-php.com/ : Blog sur l’industrialisation PHP.
dans les commentaires (exemple : s’il n’y en a pas …), build.xml contenant une série d’actions possibles pou-
l’outil fera remonter l’information. vant être dépendantes les unes des autres.
La plupart de ces outils seront mis en place via Nous avons à présent totalement défini les outils
Phing, un automatiseur de tâches open source comme supplémentaires attachés à notre build. Elle est com-
peut l’être Ant en Java. On utilise un fichier XML nommé plètement configurée, les résultats des analyses sont
www.phpsolmag.org 31
Fiche technique
Préparons et automatisons
Nous sommes dans une dynamique d’industrialisation,
c’est-à-dire simplifier et automatiser les processus histo-
riquement lourds et difficiles à gérer. Dans le cadre d’une
application web, fiabiliser notre code est très important
mais ne va pas directement impacter notre processus
de conception. La fiabilisation agira plutôt sur les délais
de développement et réduira les phases de débogage.
En amont de cette fiabilisation du code, nous pou-
vons mettre en place un outil très simple, très connu
mais pas toujours utilisé : le gestionnaire de versions,
permettant de conserver l’historique intégral des modi-
fications apportées à notre code. Les gestionnaires de
versions à la mode tels Git ont la notion de branches
permettant d’explorer des pistes sans pour autant per-
turber l’ensemble majeur des sources de l’application.
Tout projet devrait être versionné…
Ensuite, nous pouvons définir des environnements
de développement :
32 11/2010
Industrialisation de PHP
fait plutôt bien, moyennant la relecture des scripts de matiser puis mettre en place des outils d’analyse et les
migration générés. Là encore, il faut soit être de nature automatiser. Après cela, on va pouvoir changer d’autres
confiant, soit passer les migrations à la main. phases : un gestionnaire de version pour centraliser les
Notre application est maintenant déployée, accessi- sources, différents environnements de développement,
ble aux utilisateurs finaux. Pourtant, des problèmes sur- une automatisation du processus de déploiement et une
viennent et les utilisateurs nous submergent de mails. gestion des retours clients.
Un type d’application est dédié à cette récolte de retours S’industrialiser est un fait, de nombreuses entrepri-
utilisateurs (feedbacks) : les bug-trackers ou encore ses s’y attèlent. De plus, les frameworks actuels facili-
rapporteurs d’erreurs. Les utilisateurs saisissent directe- tent les choses, les concepts agiles sont bien en phase
ment leurs mésaventures via une interface web et sont avec l’industrialisation et PHP est clairement profes-
tenus au courant par mail des avancées : demande de sionnel.
précisions, résolution, rejet, prise en compte, ... L’unique problème reste la gestion du changement,
MantisBT est une solution répandue, qui peut se qui n’est ni lié à PHP, ni lié au monde informatique mais
connecter à un serveur Hudson et recevoir des infor- intimement mêlé au genre humain. Il faudra alors prépa-
mations lorsque les erreurs sont corrigées dans une rer l’équipe aux changements, montrer l’efficacité et la
build. Il existe également Bugzilla utilisé par Mozilla, nécessité de s’industrialiser. Une industrialisation réussie
plus complet et donc moins simple à prendre en main. est une industrialisation convaincante et performante.
Conclusion
Après cette introduction qui présente de nombreux William DURAND
outils, que pouvons-nous en retenir ? Premièrement L’auteur est élève ingénieur et développeur web indépendant spéc-
que nous disposons de beaucoup d’outils et qu’il ne ialisé dans le développement PHP avec le framework Symfony et Ja-
reste qu’à s’en servir. Il existe un bon nombre d’articles va depuis près de deux ans. Il est également fondateur de Bazinga,
techniques sur le sujet. une agence spécialisée en développement web et rythmée par les
La progression décrite ici est une logique d’indus- pratiques agiles.
trialisation : commencer par écrire des tests, les auto- Contact direct : http://www.willdurand.fr
www.phpsolmag.org 33
Pratique
Internationaliser
une application CakePHP
L’internationalisation d’une application ou d’un site web
consiste à fournir un contenu dans différentes langues
en permettant à l’utilisateur de changer de langue simplement,
mais aussi d’améliorer son référencement local afin de toucher
plus de visiteurs. Cela implique bien souvent une gestion
différente des données dynamiques en base de données...
n framework permet de simplifier considérable- par exemple un fichier de langue par plugin) ou de dé-
34 11/2010
CakePHP
pas de stratégie par défaut pour le choix de la langue, $L10n = new L10n();
Il est recommandé de déterminer la langue actuelle debug($currLang); // Au besoin vous pouvez utiliser
grâce à l’url, soit par l’utilisation de sous-domaine soit cette valeur pour votre propre logique
www.phpsolmag.org 35
Pratique
36 11/2010
CakePHP
partie suivante explique comment l’utiliser. Listing 8. Configuration d'un Modèle Article pour utiliser le
TranslateBehavior
Utilisation du plugin i18n de CakeDC class Article extends AppModel {
Le plugin i18n proposé par CakeDC est un plugin Open public $actsAs = array(
Source (licence MIT) contenant notamment une route
'Translate' => array('titre', 'contenu')
);
permettant de gérer la langue actuelle par l’url grâce }
www.phpsolmag.org 37
Pratique
38 11/2010
CakePHP
www.phpsolmag.org 39
Pour les débutants
SQL :
langage de manipulation des données
Les bases de données sont très utilisées dans les applications
Web. La création, l’interrogation et la manipulation
des données de la base sont réalisées en SQL. Dans cette série
d’articles vous apprendrez le langage SQL ainsi que les bases
nécessaires pour communiquer avec une base de données
à partir d’un script PHP.
D
ans l’article précédent, sur le langage de défi- Insérer une ligne de données
nition des données, vous avez appris à créer La commande SQL INSERT permet d’insérer des don-
une base et des tables. Vous allez maintenant nées dans une table. Il faut préciser le nom de la table
apprendre à insérer des données dans cette base, à les et éventuellement la liste des colonnes dans lesquelles
modifier ou à les supprimer tout en tenant compte des les données vont être insérées. La première valeur in-
contraintes établies. diquée sera liée au nom de la première colonne listée,
Pour appliquer les notions présentées, vous devez uti- la seconde valeur à la seconde colonne, etc... La com-
liser un serveur de base de données MySQL, de préféren- mande suit la syntaxe :
ce la version 5, un serveur web avec PHP version 5 et le
client graphique phpMyAdmin. Les distributions XAMPP INSERT INTO nom _ table (col1, col2, ...)
(Windows, Linux, Mac OS), WAMP (Windows), EasyPHP VALUES (val1, val2, ...);
(Windows) ou MAMP (Mac OS) vous fourniront l’environ-
nement de travail nécessaire. Type de données
Dans cet article, nous allons utiliser l’exemple d’une Lorsque la valeur insérée est de type chaîne de carac-
bibliothèque privée dont le schéma est représenté par tères, il faut indiquer la valeur entre quotes. Par exem-
la Figure 1. Le Listing 1 donne les instructions SQL de ple, pour insérer un nom dans la colonne nom de la table
création de tables. auteur, la valeur 'Tolkien' est utilisée. Les nombres
40 11/2010
SQL
sont entrés tels quels. Par exemple, la colonne clé pri- Listing 1. Création tables
maire id_auteur prend la valeur 7. Les dates doivent
-- selectionner la base de travail
suivre un format prédéfini (YYYY-MM-DD) et être écrites USE biblio;
entre quotes. Tolkien est né un 03 janvier 1892 ce qui
-- creer les tables
se traduit en MySQL par : '1892-01-03'. Pour signaler CREATE TABLE zone (
l’absence d’information, il suffit d’utiliser la valeur NULL, code _ zone CHAR(10) NOT NULL,
piece VARCHAR(20),
sans quotes afin qu’elle ne soit pas considérée comme meuble VARCHAR(20),
une chaîne de caractères, comme dans l’exemple sui- CONSTRAINT pk _ zone PRIMARY KEY (code _ zone)
)ENGINE = InnoDB;
vant :
CREATE TABLE livre (
isbn CHAR(20) NOT NULL,
INSERT INTO auteur (id _ auteur, nom, titre VARCHAR(30) NOT NULL,
prenom, date _ naissance) VALUES genre ENUM('roman','policier','theatre','historique',
'fantastique'),
(7,'Tolkien',NULL,'1892-01-03'); date _ parution INTEGER,
langue ENUM('francais','anglais','allemand','espagnol',
'chinois') DEFAULT 'francais',
La valeur NULL ne doit pas être confondue avec la chaî- nb _ pages INTEGER UNSIGNED,
ne vide ou le chiffre 0. Elle est utilisée pour symboliser preface ENUM('oui','non'),
code _ zone CHAR(10),
l’absence d’information. CONSTRAINT pk _ livre PRIMARY KEY (isbn),
CONSTRAINT fk _ zone FOREIGN KEY (code _ zone)
REFERENCES zone(code _ zone) ON DELETE SET NULL ON
Ordre d’insertion UPDATE CASCADE
Si toutes les colonnes sont renseignées, il n’est pas né- )ENGINE = InnoDB;
cessaire de les lister dans la commande. Dans ce cas, CREATE TABLE auteur (
il faut donner les valeurs dans l’ordre de déclaration des id _ auteur INTEGER NOT NULL AUTO _ INCREMENT,
nom VARCHAR(45) NOT NULL,
colonnes. Par exemple, dans la table auteur, l’instruc- prenom VARCHAR(45),
tion suivante est équivalente à celle proposée ci-des-
date _ naissance DATE,
CONSTRAINT pk _ auteur PRIMARY KEY (id _ auteur)
sus : )ENGINE = InnoDB;
www.phpsolmag.org 41
Pour les débutants
42 11/2010
SQL
cadre de gauche de l’interface. Le formulaire d’insertion est sous-ensemble de lignes, il faut utiliser la clause WHERE
disponible à partir de l’onglet Insérer dans le cadre droit (Fi- suivie d’une condition. Seules les lignes qui satisfont
gure 2). Une fois le formulaire soumis, la requête est géné- la condition sont modifiées. Par exemple, pour mettre
rée automatiquement, affichée et envoyée à MySQL. à jour seulement les livres en français :
SELECT * FROM nom _ table; Si plusieurs livres portaient ce nom dans la base, le gen-
re aurait été modifié pour chacun. Pour éviter cette si-
Pour afficher la liste des auteurs enregistrés dans la base, tuation, il vaut mieux utiliser la clé primaire de l’ouvrage
il suffit de taper la commande suivante dans la console : car elle identifie une seule et unique ligne de la table :
www.phpsolmag.org 43
Pour les débutants
DELETE FROM nom _ table [WHERE condition]; et livre comporteront les valeurs définies dans les
tableaux 1 et 2.
Pour effacer le livre Notre Dame de Paris, il faut utili- Ainsi, l’attribution de la zone s10 au livre Les four-
ser la commande : mis est refusée car le code_zone n’existe pas dans la
table zone :
DELETE FROM livre WHERE isbn = '598-5-55596-2';
UPDATE livre SET code_zone = 's10' WHERE isbn
Attention, si vous n’indiquez aucune condition, toutes = '102-2-35419-5';
les lignes de votre table seront supprimées. #1452 - Cannot add or update a child
Dans phpMyAdmin, l’icône en forme de croix à côté row: a foreign key constraint fails
du crayon permet de supprimer la ligne (Figure 3). ('biblio'.'livre', CONSTRAINT 'fk_zone'
FOREIGN KEY ('code_zone') REFERENCES 'zone'
Manipuler des clés étrangères ('code_zone') ON DELETE SET NULL ON UPDATE
Une clé étrangère peut prendre la valeur NULL ou CASCADE)
une valeur issue de la clé primaire de la table qu’elle
référence. Cette restriction entraîne parfois des dif- L’attribution de la zone s8 qui existe ne pose pas de
ficultés lors des insertions, des mises à jour ou des problème, ici pour le livre Les fourmis :
suppressions. Lors des insertions dans la base bi-
blio, aucune valeur n’a été attribuée aux clés étran- UPDATE livre SET code _ zone = 's8' WHERE isbn
gères. Pour les exemples suivants, les tables zone = '102-2-35419-5';
44 11/2010
Rejoignez le Club .PRO
Sur Internet
• http://www.mysql.fr – MySQL,
Rejoignez le Club .PRO
Pour plus de renseignement : editor@phpsolmag.org
Stonfield
Pour Inworld : editor@phpsolmag.org
plus de renseignement
• http://www.phpmyadmin.net – phpMyAdmin. Stonfield Inworld propose aux entreprises des solutions globale
d'intègration d'Internet et des Univers Virtuels dans leur stratégie
Stonfield
de développement.Inworld
Au-delà de ses services, la société consacre 30%
de ses ressources
Stonfield à des travaux
Inworld propose de R&D des
aux entreprises sur le e-Commerce
solutions globale
et le e-Learning dans les Mondes Virtuels
Les propriétés indiquées lors de la création de la ta- d'intègration d'Internet et des Univers Virtuels dans leur stratégie
de développement. Au-delà de ses services, la société consacre 30%
ble (cf Article SQL : langage de définition des données) de ses ressources à des travaux de R&D sur le e-Commerce
influent sur le comportement lors de mises à jour ou et le e-Learning dans les Mondes Virtuels
COGNIX Systems
de suppressions de valeurs référencées (clauses ON Conseil, conception et développement d'applications évoluées pour
UPDATE ou ON DELETE). Par exemple, la modification les systèmes d'informations Internet/intranet/extranet. Alliant les
ou la suppression du code_zone dans la table zone en- COGNIX
compétences Systems
d'une SSII et d'une Web Agency, Cognix Systems
conçoit des
Conseil, applicatifs
conception et detéveloppement
portails web àd'applications
l'ergonomie travaillée
évoluées pour
traînera une mise à jour automatique de la table livre et des
les sites Internet
systèmes à forte valeur
d'informations ajoutée.
Internet/intranet/extranet. Alliant les
grâce aux clauses ON UPDATE CASCADE et ON DELETE http://www.cognix-systems.com
compétences d'une SSII et d'une Web Agency, Cognix Systems
conçoit des applicatifs et portails web à l'ergonomie travaillée
SET NULL.
et des sites Internet à forte valeur ajoutée.
WEB82
http://www.cognix-systems.com
UPDATE zone SET code _ zone = 's11' WHERE éation et hébergements
Création
Cr hébergements de de sites
sites web
web pour
pour particuliers,
particuliers, associations,
associations,
entreprises, e-commerce. Développement entierement aux normes
code _ zone = 's8'; WEB82
W3C (www.w3.org) de sites web de qualité, au graphisme soigné soigné
DELETE FROM zone WHERE code _ zone = 'c10'; etéemployant
Cr les dernieresde
hébergements
ation et hébergements
Création detechnologies
sites web
sites du web
web pour
pour (PHP5, associations,
particuliers,
particuliers, MySQL5,
associations,
Ajax, XHTML,
entreprises, CSS2). Développement entierement aux normes
e-commerce.
SELECT * FROM livre; http://www.web82.net
d’applications web au CNRS. Elle enseigne les bases de données Vous souhaitez être en première page des moteurs de recherche ?
Intelligence Rejoignez-nous,
Power 100% des clients Web Alliance sont en 1ère page
et PHP à l’université.
Web
de Alliance
Conseil, Expertises, Formations et Projets E-business centrés au tour du cĞur de métier : la Business
Google. Web Alliance, société de conseil spécialisée dans le
Intelligence. Intelligence Power vous propose des solutions innovantes pour aligner la technologie sur
Contact : cilia.mro@gmail.com référencement
la stratégie de votre
Vous entreprise. internet,
souhaitez être vous propose
en première son moteurs
page des expertisede(référencement,
recherche ?
Magali Contensin est chef de projet en développement d’applica- liens sponsorisés,
http://www.intelligencepower.com
Rejoignez-nous, web-marketing).
100% des clients Web Alliance sont en 1ère page
www. web-alliance. fr
de Google. Web Alliance, société de conseil spécialisée dans le
tions au CNRS. Elle enseigne depuis plus de dix ans le développe-
référencement internet, vous propose son expertise (référencement,
Web Alliance
ment d’applications web à l’université et est l’auteur de nombreux Vous souhaitez être en première page des moteurs de recherche ? Rejoignez-nous, 100% des clients
liensensponsorisés,
Web Alliance sont web-marketing).
1ère page de Google. Web Alliance, société de conseil spécialisée dans le
articles sur le développement web en PHP. www. web-alliance.
référencement internet, vous propose sonfrexpertise (référencement, liens sponsorisés, web-marketing).
www.web-alliance.fr
Contact : http://magali.contensin.online.fr
www.phpsolmag.org
Club .PRO 45
Interview
Interview
de Félix Chassagne,
responsable de l’hébergement eziHost
PHP Solutions : Bonjour, tout d’abord nous vous re- PS : Pouvez-vous nous présenter les avantages de
mercions de nous accorder du temps pour cette in- vos solutions d’hébergement ?
terview. Pourriez-vous vous présenter aux lecteurs FC : Pour garantir la sécurité des données nous utilisons
de PHP Solutions ? la technologie RAID au niveau des disques durs asso-
Félix Chassagne : eziHost est un service d’héberge- ciée à un système de sauvegarde externe. Nous ne sur-
ment sur Internet (depuis 2001) spécialisé dans l’héber- chargeons pas les machines, en limitant le nombre de
gement de sites Web en PHP/MySQL. Nous proposons, sites à 45 par serveurs et en séparant les services Web
en outre, des noms de domaines (bureau d’enregistre- et mail.
ment Network Solutions depuis 2002 et AFNIC depuis
2008) et des mails à nos clients ainsi que des services PS : Quels sont les outils que vous utilisez pour as-
complémentaires, dont : surer à vos clients la qualité du service ?
− installation de systèmes de gestion de contenu FC : Nous sommes présent si un client nous contac-
(blog, wiki, forum…), te par mail ou par téléphone, mais nous essayons de
− suivi statistique de l'activité du site, tableau des logs trouver des solutions en amont. En ce sens, au niveau
et bande passante… des outils, nous avons mis en place un système de
− audits de performance simplifiés semestriels avec gestion des tickets nous permettant d’être plus réactif
l'option Full Services. et efficace dans la résolution des problèmes de nos
clients. Nous diffusons en complément une lettre d’in-
PS : Quels sont les projets à venir d’eziHost ? formation afin de les tenir informés de l’actualité d’ezi-
FC : Nos clients peuvent gérer leur compte grâce à une Host (évolution des services, mise à jour système, pro-
interface Web. Cette interface est donc au cœur de no- motions…).
tre prestation. Ainsi, nous prévoyons de poursuivre les
améliorations de ce panel de gestion, et de pousser une Pouvez-vous nous donner quelques exemples d’en-
automatisation plus complète de notre architecture de treprises qui ont fait appel à vos services ?
serveurs. FC : Internet touche toutes les branches, nos clients sont
donc représentatifs de ce phénomène. En voici quelques
PS : Comment vous voyez le Web de demain ? exemples : Airria, AST Groupe, Crédit Agricole, Externat
FC : «Comme au supermarché», des solutions clé en Notre Dame, IMGR, Innovia, Le Périscope, Nouveau mon-
main, prêtes à l’emploi, mais personnalisables. Nous de DDB, Sanisère, Somudimec, Tenerrdis, Vercors Tra-
nous efforçons donc de proposer des offres simples versées, Vi TECHNOLOGY, Volubill, Ydesign, Zamst...
mais souples pour répondre au mieux aux attentes de
chacun de nos clients. Quelques informations clés sur eziHost ?
46 11/2010
SQL
www.phpsolmag.org 47
SQL
48 11/2010