Framework PHP sous IIS - Microsoft Center

publicité
Framework PHP sous IIS
Zend Framework (http://framework.zend.com)
Avertissement
Dans le cadre de cet article, nous avons besoin d’un environnement complet de développement (PHP
sous IIS7 et SQL Server Express 2008). La mise en place de cet environnement est abordée dans deux
autres articles :
-
« Web Platform Installer » pour l’installation de PHP sous IIS7 ;
« Framework PHP sous IIS : Copix Framework » pour l’installation de SQL Server Express
2008.
Si votre environnement de développement doit posséder à la fois WAMP et IIS, vous pouvez
consulter l’article « Faire cohabiter WAMP et IIS ».
Préambule
Dans cet article, nous allons faire passer vers IIS7 un site Internet développé avec « Zend
Framework ». Ce site est initialement hébergé par WAMP, au sein d’un environnement de
développement, sur la base de la version 1.8.3 du framework. Le site que nous avons utilisé est une
boutique en ligne de vente d’écharpes.
La boutique sous WAMP
Avant de commencer, regardons rapidement à quoi ressemble notre boutique en ligne lorsqu’elle est
hébergée sous WAMP. La capture écran qui suit vous donnera une idée de son apparence.
Dans notre cas, la configuration de WAMP a été modifiée afin que le serveur HTTP Apache écoute sur
le port 8080. Ceci nous permet de ne pas être en conflit avec les applications et sites hébergés par IIS
qui sont placés sur le port 80.
Ainsi, pour accéder à la version WAMP de notre boutique, nous employons l’URL
http://localhost:8080/echarpe-belle.com.
Framework PHP sous IIS | Adenova
1 / 24
Création de la base de données
Notre boutique en ligne a évidemment besoin d’une base de données. Cette base de données est
actuellement hébergée par MySQL et s’appelle « echarpes ». Nous allons en faire une duplication
pour SQL Server Express 2008 et nous l’appellerons « shop ».
Ajouter la base de données
Passons maintenant à la création de la base de données « shop » au sein de SQL Server Express 2008.
Pour cela, nous allons utiliser l’outil de gestion associé : « Microsoft SQL Server Management
Studio ». Dans la liste de vos programmes, dans le dossier « Microsoft SQL Server 2008 », il faut
sélectionner « Microsoft SQL Management Studio ».
Framework PHP sous IIS | Adenova
2 / 24
Si nécessaire, nous indiquons le mot de passe pour accéder à l’outil de gestion de SQL Server Express
2008.
Dans la zone supérieure gauche de l’outil, nous faisons un clic droit sur « Base de données » puis
nous choisissons l’option « Nouvelle base de données… ». Nous renseignons la boîte de dialogue qui
s’affiche comme ci-dessous :
Framework PHP sous IIS | Adenova
3 / 24
Pour paramétrer l’encodage de la base de données, il faut cliquer à gauche sur « Options » et choisir
dans le menu « Classement » la valeur « SQL_Latin1_General_CP1_CI_AS ».
Nous validons en cliquant sur le bouton « OK ». Notre base de données est maintenant créée,
comme nous le montre l’illustration qui suit :
Framework PHP sous IIS | Adenova
4 / 24
Génération d’un fichier SQL
Pour assurer la création des tables et l’intégration des données au sein de la base de données
« shop » que nous venons de créer, nous avons besoin d’un fichier SQL. Nous allons générer ce
fichier SQL grâce à l’outil « MySQL Administrator ».
Pour cela, lancez « MySQL Administrator » que vous trouvez normalement dans le dossier « MySQL »
de la liste de vos programmes. Indiquez le mot de passe, puis cliquez sur « OK ». Dans la zone
supérieure gauche de l’outil, choisissez « Backup » :
Framework PHP sous IIS | Adenova
5 / 24
Ensuite cliquez en bas à droite sur le bouton « New Project », puis donnez le nom « export » au
projet. Sélectionnez ensuite toutes les tables de la base de données « echarpes » :
Dans le panneau « Advanced Options », activez les options comme dans l’illustration ci-dessous puis
cliquez sur le bouton « Execute Backup Now ».
Framework PHP sous IIS | Adenova
6 / 24
Pour plus de simplicité, prenez soin de nommer votre fichier SQL « export.sql ». Placez-le dans le
dossier de votre choix.
Modification du fichier SQL
Les requêtes SQL de MySQL et de SQL Server n’étant pas parfaitement compatibles, nous allons
procéder à quelques modifications à l’intérieur de notre fichier SQL généré.
Ces informations ont déjà été présentées dans l’article « « Framework PHP sous IIS :
Copix Framework ». Cependant, ce qui suit a été quelque peu adapté au contexte de notre article.
Ouvrez donc le fichier « export.sql » dans votre éditeur préféré pour y apporter les modifications cidessous :
-
Supprimez toutes les guillemets doubles qui encadrent les noms des tables et des champs ;
Supprimez les deux lignes ci-dessous (elles se trouvent plutôt au début du fichier) :
CREATE DATABASE IF NOT EXISTS echarpes;
USE echarpes;
-
Complétez le chemin d’accès aux tables en ajoutant devant tous les noms des tables
l’information ci-dessous (ceci doit être fait pour les requêtes CREATE TABLE et INSERT) :
shop.dbo.nomdematable1
Framework PHP sous IIS | Adenova
7 / 24
-
Supprimer toutes les mentions ci-dessous (elles se trouvent toutes derrière les déclarations
de création de table) :
TYPE=InnoDB;
-
Supprimer également les mentions (si elles existent, elles suivent toujours la déclaration du
type des tables) :
AUTO_INCREMENT=X;
Il est important de vérifier que les fins de déclaration de création de table (CREATE TABLE) se
terminent toujours bien par un point-virgule.
-
-
-
Si des champs sont déclarés en AUTO_INCREMENT, remplacez cette mention par IDENTITY ;
Si des champs sont déclarés en UNIQUE KEY nom (champ), remplacez cette mention par
CONSTRAINT nom UNIQUE(champ) ;
Supprimer toutes les définitions de longueur des champs INT ou TINYINT (par exemple
INT(11) doit devenir simplement INT) ;
Si possible, remplacer le type DOUBLE par le type MONEY pour une colonne chargée de stocker
une information monétaire. Le type MONEY est proposé par toutes les bases de données SQL
Server. Il permet de stocker des informations monétaires jusqu’à 19 chiffres dont 4 après le
séparateur. On peut même y insérer certains symboles monétaires. Pour plus d’informations
à ce sujet, vous pouvez consulter l’URL http://msdn.microsoft.com/frfr/library/ms188688.aspx. Sinon, remplacer le type DOUBLE par le type DECIMAL(6,2). La
première valeur spécifie le nombre total de chiffres que l’objet peut posséder. La seconde, le
nombre de chiffres qui peuvent être placés après le séparateur. Pour plus d’informations à ce
sujet, vous pouvez consulter l’URL http://msdn.microsoft.com/fr-fr/library/ms187912.aspx.
Dans les requêtes INSERT, supprimer tous les champs et valeurs associées qui sont définis en
IDENTITY ;
Protéger éventuellement les champs qui portent des noms réservés pour SQL Server par des
crochets (nous n’avons pas dans notre cas) ;
Doubler les éventuels guillemets droits simples présents dans les contenus des champs de
type TEXT ou VARCHAR (par exemple, si on a comme texte : 'Petite soirée d\'hiver' »,
alors il doit devenir : 'Petite soirée d''hiver') ;
Supprimer éventuellement les \r\n présents dans les contenus des champs de type TEXT ou
VARCHAR ;
Supprimer tous les commentaires placés au début du fichier, avant la première requête SQL
(les suivantes ne devraient pas poser de problème).
Enregistrez les modifications : notre fichier est prêt pour être importé dans SQL Server Express 2008.
Création des tables et des données
Nous allons maintenant créer les tables et les données dans SQL Server Express 2008 en utilisant
notre fichier SQL modifié.
Si l’outil « Microsoft SQL Server Management Studio » n’est pas lancé, lancez-le, indiquez le login
« sa » et le mot de passe associé.
Framework PHP sous IIS | Adenova
8 / 24
Dans la zone latérale gauche, déployez la liste des bases de données, et faîtes un clic droit sur la base
de données « shop » que nous avons créée il y a quelques instants. Choisissez l’option « Nouvelle
requête », puis faîtes un copier – coller du contenu du fichier « export.sql » que nous venons de
modifier dans la partie centrale qui apparaît.
Dans le menu « Affichage », « Barres d’outils », vérifiez que « Editeur SQL » soit coché. Pour envoyer
les requêtes SQL au serveur, cliquez sur le bouton « Exécuter ».
L’ensemble des tables et des données nécessaires au fonctionnement de notre boutique sont
maintenant placées au sein de notre base de données « shop » sur SQL Server Express 2008.
Plus loin dans cet article, nous verrons comment indiquer à notre application qu’elle doit faire appel
aux données stockées dans notre base de données « shop » de SQL Server Express 2008.
Framework PHP sous IIS | Adenova
9 / 24
Création du site
Récupération et copie des sources
Avant de procéder à la création de l’espace web de notre boutique, nous allons tout d’abord créer un
dossier qui va contenir une copie de l’ensemble de nos sources. C’est vers ce dossier que l’alias créé
ensuite pointera.
Le dossier peut être créé à l’endroit qui vous convient. Dans notre cas, nous créons un dossier
« echarpe-belle.com » dans « C:\work\web ». Nous y copions ensuite les sources. Comme notre
boutique était précédemment hébergée sous WAMP, ses sources étaient placées dans le dossier
« C:\wamp\www\echarpe-belle.com ».
Il est important de vérifier que toute l’arborescence attendue par une application ou un site web
développé avec Zend Framework soit présente.
Création de l’alias
Nous allons maintenant procéder à la création de l’espace web. Notre dossier est créé, il nous reste
donc simplement qu’à indiquer à IIS la création d’un nouvel alias qui dirigera vers ce dossier.
Pour créer l’alias « echarpe-belle.com » au sein d’IIS, nous allons utiliser le « Gestionnaire des
Services Internet ». Quand le gestionnaire est initialisé, déplier l’arborescence de la zone latérale
gauche jusqu’à voir la liste des sites. Dans la liste des sites, faîtes un clic droit sur « Default Web
Site », puis sélectionnez l’option « Ajouter une application ».
Framework PHP sous IIS | Adenova
10 / 24
La boîte de dialogue ci-dessous apparaît alors :
Indiquez alors l’alias, puis dans le champ « Chemin d’accès physique », le dossier dans lequel nous
avons placé les sources de notre boutique. Validez en cliquant sur le bouton « OK ».
Pour visualiser le contenu de ce nouveau site, il suffit de faire un clic droit sur l’application « echarpebelle.com » que nous venons de créer, toujours au sein de la zone latérale gauche du « Gestionnaire
de Services Internet ». Choisissez alors l’option « Gérer une application », puis « Parcourir ». Une
Framework PHP sous IIS | Adenova
11 / 24
fenêtre s’ouvre alors au sein de votre navigateur par défaut à l’URL http://localhost/echarpebelle.com. Pour l’instant, nous obtenons l’affichage ci-dessous :
Problématique des balises courtes d’ouverture de PHP
Le souci d’affichage que nous obtenons est lié à la prise en charge des balises courtes d’ouverture de
PHP (short_open_tag) par IIS. En effet, tous les scripts de vue et layouts de notre projet Zend
Framework emploient ces balises courtes.
Pour remédier à cela, nous allons modifier le fichier « php.ini » en utilisant le Bloc-notes en mode
administrateur.
Une fois le Bloc-notes lancé, il faut ouvrir le fichier « php.ini » qui se trouve dans le dossier
« C:\Program Files\PHP » et y rechercher la directive « short_open_tag » pour placer sa valeur à
« on » (au lieu de « off » par défaut). On termine en enregistrant les modifications apportées au
fichier, puis en redémarrant IIS.
Nous rappelons ici que pour redémarrer IIS, on utilise aussi le « Gestionnaire de Services Internet » :
dans la zone latérale gauche, cliquez sur le nom de votre ordinateur, puis dans la zone latérale droite,
cliquez sur l’option « Redémarrer », comme le montre la capture écran ci-dessous :
Framework PHP sous IIS | Adenova
12 / 24
Nous actualisons la page de notre boutique à l’URL http://localhost/echarpe-belle.com et nous
obtenons l’affichage ci-dessous :
Framework PHP sous IIS | Adenova
13 / 24
Gestion de la réécriture d’URL (URL Rewriting)
En cliquant sur le lien « Toutes nos écharpes », nous obtenons l’affichage ci-dessous :
Framework PHP sous IIS | Adenova
14 / 24
Ceci est lié au fait que nous n’ayons pas encore configuré les règles de réécriture d’URL.
Pour cela, il nous faut avant tout, procéder à l’installation du module de gestion de la réécriture
d’URL. Le plus simple est d’utiliser Web Platform Installer. Nous y accédons en utilisant le
Gestionnaire des Services Internet.
Au sein du Gestionnaire des Services Internet, repérez l’icône Web Platform Installer et doublecliquez dessus.
Framework PHP sous IIS | Adenova
15 / 24
Dès que Web Platform Installer est lancé, activez l’option « URL Rewrite 1.1 ». Si jamais une mise à
jour de Fast CGI vous est proposée, activez-la également.
Acceptez éventuellement les conditions d’utilisation et laissez l’installation s’opérer. Lorsqu’elle est
terminée, quittez Web Platform Installer.
Pour que nous ayons accès aux fonctionnalités de réécriture d’URL, nous devons aussi quitter le
Gestionnaires des Services Internet et le redémarrer. Une fois que cela est fait, vous verrez
apparaître l’icône ci-dessous :
Cela confirme que le module de gestion de la réécriture d’URL est actif et correctement installé.
Framework PHP sous IIS | Adenova
16 / 24
Nous pourrions utiliser l’interface de gestion des URL proposé par le module, mais le plus simple
dans notre cas est de faire une copie des règles de réécriture proposées par Zend à
l’URL http://framework.zend.com/manual/fr/zend.controller.html#zend.controller.quickstart.go.rew
rite pour les placer dans un fichier « web.config » à placer dans la racine de notre espace web. Dans
notre cas, ce fichier devra donc être dans le dossier « C:\work\web\echarpe-belle.com\public ».
Les directives à placer dans ce fichier sont les suivantes :
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^.*$" />
<conditions logicalGrouping="MatchAny">
<add input="{REQUEST_FILENAME}"
matchType="IsFile" pattern=""
ignoreCase="false" />
<add input="{REQUEST_FILENAME}"
matchType="IsDirectory"
pattern="" ignoreCase="false" />
</conditions>
<action type="None" />
</rule>
<rule name="Imported Rule 2" stopProcessing="true">
<match url="^.*$" />
<action type="Rewrite" url="index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Utilisez votre éditeur de texte préféré pour ajouter ces directive dans le fichier « web.config »,
enregistrez les modifications apportées.
Pour visualiser ces règles de réécriture d’URL au sein du Gestionnaire de Services Internet, vous
devez sélectionner dans la zone latérale gauche le site Internet que vous avez ajouté puis doublecliquer sur l’icône « URL rewrite » :
Framework PHP sous IIS | Adenova
17 / 24
Vous devriez alors voir apparaître la liste des règles comme ci-dessous :
En double-cliquant sur une des règles de réécriture, vous pourrez voir comment il se compose.
Comme promis, voyons maintenant comment indiquer à notre application qu’elle doit faire appel aux
données stockées dans notre base de données « shop » de SQL Server Express 2008.
Framework PHP sous IIS | Adenova
18 / 24
Modifier la configuration d’accès aux données
Dans notre cas, l’accès à la base de données est configuré dans un fichier « config.ini ». Il est placé
dans le dossier « C:\work\web\echarpe-belle.com\application\config ».
Ce fichier de configuration contient une section « [database] » qui contient tous les paramètres de
connexion à la base de données. Nous allons les modifier pour désormais accéder à la nouvelle base
de données « shop ».
Voici ce que nous avions précédemment à la section « [database] » :
[database]
database.adapter
database.params.host
database.params.port
database.params.username
database.params.password
database.params.dbname
=
=
=
=
=
=
Pdo_Mysql
localhost
3307
root
echarpes
PRECISION : DANS NOTRE CAS, LE PORT D’ACCES A LA BASE DE DONNEES MYSQL A ETE PARAMETRE 3307 CAR NOUS
AVONS PLUSIEURS INSTANCES DE CETTE BASE DE DONNEES INSTALLEES AU SEIN DE NOTRE ENVIRONNEMENT DE
DEVELOPPEMENT : UNE POUR FONCTIONNER AVEC WAMP ET UNE AUTRE POUR FONCTIONNER AVEC IIS. DE PLUS,
NOTRE CONFIGURATION D’ACCES A MYSQL NE POSSEDE PAS DE MOT DE PASSE, CE QUI NE SERA PAS LE CAS POUR LA
CONFIGURATION D’ACCES A SQL SERVER EXPRESS 2008.
Nous modifions le contenu de cette section comme ci-dessous :
[database]
database.adapter
database.params.host
database.params.username
database.params.password
database.params.dbname
=
=
=
=
=
Pdo_Mssql
BASILIC
sa
votremotdepasse
shop
La ligne qui détermine le port a été supprimée car nous utilisons le port par défaut de SQL Server.
Pour la ligne qui définit l’hôte, il faut y placer le nom de votre machine. Et le plus important, bien sûr,
c’est d’indiquer l’adaptateur PDO qui convient : nous utiliserons évidemment « Pdo_Mssql ».
ATTENTION : CELA SUPPOSE BIEN SUR QUE L’EXTENSION PDO_MSSQL SOIT INSTALLEE ET ACTIVE. SI CE N’EST PAS LE
CAS VOUS POUVEZ VOUS REPORTER A L’ARTICLE « FRAMEWORK PHP SOUS IIS : COPIX FRAMEWORK ».
En actualisant la page http://localhost/echarpe-belle.com/toutes-nos-echarpes de notre boutique,
nous obtenons l’affichage qui suit :
Framework PHP sous IIS | Adenova
19 / 24
Ceci est dû au fait que certaines requêtes SQL décrites pour MySQL ne sont pas compatibles avec SQL
Server. L’erreur ci-dessus nous indique que la requête qui pose problème est « SET NAMES 'utf8' »
qui permet de garantir sous MySQL que toutes les transactions à suivre se feront en utilisant
l’encodage UTF-8.
Nous allons simplement retirer de notre code source l’appel à cette requête. Dans notre cas, cet
appel se situe dans le module « shop », dans le contrôleur « products », au sein de l’action « list ».
Nous actualisons à nouveau notre page. Cette fois nous obtenons l’affichage ci-dessous :
Framework PHP sous IIS | Adenova
20 / 24
SQL Server nous retourne l’erreur suivante :
La colonne 'categories.idCategory' n'est pas valide dans la liste de sélection
parce qu'elle n'est pas contenue dans une fonction d'agrégation ou dans la clause
GROUP BY.
Cette erreur apparaît parce que la colonne « idCategory » de la table « categories » n’est pas appelé
dans la clause « GROUP BY ». Nous modifions donc simplement notre requête comme ci-dessous :
$sql
$sql
$sql
$sql
= "SELECT
.= "RIGHT
.= "GROUP
.= "ORDER
c.name category, c.idCategory id FROM categories c ";
JOIN products p ON c.idCategory = p.idCategory ";
BY c.idCategory, c.name ";
BY category";
Ce qui est souligné et en italique correspond à ce qui a été ajouté pour que notre requête devienne
fonctionnelle.
Gestion de l’encodage
Comme les transactions ne se font plus en UTF-8, il faut penser à encoder ce qui est affiché par les
scripts de vues et les layouts en UTF-8 en utilisant tout simplement la fonction PHP
« utf8_encode() ».
Par exemple, le titre d’une de nos écharpes ne se présente pas correctement :
Framework PHP sous IIS | Adenova
21 / 24
Pour corriger ce problème, nous ouvrons le script de vue chargé d’afficher la liste des produits. Dans
notre cas, il s’agit du fichier « products.phtml » stocké dans « C:\work\web\echarpebelle.com\application\modules\shop\views\scripts ». A la L. 5 de ce fichier nous ajoutons l’appel à la
fonction PHP « utf8_encode() » :
<p class="product-item-name"><strong><?= utf8_encode($this->name);
?></strong></p>
Après correction, si nous visualisons à nouveau notre écharpe, nous observons que l’affichage est
devenu correct :
Framework PHP sous IIS | Adenova
22 / 24
Résultat
Pour terminer, nous actualisons la page qui liste les produits de notre boutique et nous obtenons le
résultat ci-dessous :
Framework PHP sous IIS | Adenova
23 / 24
En quelques étapes, nous avons donc réussi à migrer notre boutique développée avec Zend
Framework sous IIS et SQL Server Express 2008.
Framework PHP sous IIS | Adenova
24 / 24
Téléchargement