Mettre en place un environnement de développement pour réaliser un site avec PHP et MySQL

AMPP logos

Pourquoi mettre en place un environnement de développement ?

Afin de vous faciliter la prise en main et la compréhension du fonctionnement de la plupart des applications réalisées avec les technologies PHP et MySQL (WordPress, Joomla, Drupal, PrestaShop, Magento, …) je vous recommande de travailler localement c’est à dire directement sur votre ordinateur. Celui-ci devra être configuré pour pouvoir faire fonctionner:

  • Un serveur Web interprétant le langage PHP
  • Le SGBDR MySQL pour stocker les données de votre application.

Ainsi vous pourrez plus facilement:

  • Développer le site (modifier les templates et vos fichiers css) sans avoir à synchroniser vos fichiers sur un serveur.
  • Tester des plugins et des thèmes rapidement et sans impacter votre site une fois celui-ci en ligne.
  • Ne pas vous soucier d’une éventuelle mauvaise manipulation qui pourrait porter atteinte à vos données.

Idéalement utiliser un outil de gestion de version (revision control software en Anglais) afin de garder l’historique de vos changements apportés à votre site (révisions). Si vous devez travailler en équipe, c’est un outil indispensable à mettre en place dès le début de votre projet (Subversion, Git). Enfin, dans le cas d’un projet professionnel, je vous recommande vivement l’utilisation d’un logiciel de suivi de problèmes (bug tracker en Anglais)

Choisir le serveur HTTP

Il existe différents serveur HTTP que vous pouvez installer sur votre ordinateur. Voici une liste non exhaustive:

Voici un comparatif des différents serveurs HTTP. Pour commencer je vous recommande d’utiliser le serveur HTTP Apache dans sa version 2.x. C’est le serveur HTTP le plus repandu au monde (netcraft), il dispose de nombreux modules et c’est certainement l’un des plus complet en terme de fonctionnalités. De plus il est packagé prêt à l’emploi sur de nombreux systèmes d’exploitations.

  • WAMP ou EasyPHP sous Windows
  • MAMP sous MacOs
  • Depuis des dépôts (apt, yum) sous linux

Sous système Debian et dérivés (Ubuntu, …) voici la commande pour pouvoir installer tout ce dont vous aurez besoin pour pouvoir faire fonctionner WordpPress:

$ sudo apt-get install apache2 mysql-server php5 php5-mysql phpmyadmin

Une fois que vous aurez installé votre serveur HTTP sur votre ordinateur, vous pourrez alors consulter la page Web par défaut délivrée par celui-ci en requêtant votre localhost. Pour cela ouvrez un navigateur web puis renseignez l’url suivante: http://localhost.

phpinfo

Il est parfois nécessaire de préciser le port lorsqu’il est différent de celui par défaut à savoir le port 80. C’est le cas pour MAMP par exemple sur MacOS ou il vous faudra renseigner l’adresse suivante: http://localhost:8888

Configuration du serveur WEB pour interpréter le langage PHP

Pour pouvoir faire fonctionner votre application PHP, il faut que votre serveur HTTP soit capable d’interpréter ce langage. Dans le cas du serveur Apache vous avez le choix entre deux méthodes:

  • PHP en module Apache
  • PHP en CGI

De nombreux sites exposent les différences entre ces deux méthodes. Par défaut, le serveur Apache interprétera le code PHP par la méthode « module Apache », mais ceci est paramétrable. Pour vérifier que votre serveur HTTP est bien configuré pour exécuter du code PHP, vous pouvez créer un fichier nommé phpinfo.php est le déposer à la racine Web de votre serveur HTTP:

  • c:\wamp\www\ avec WAMP sous Windows
  • c:\EasyPHP\www avec EasyPHP sous Windows
  • /Applications/MAMP/htdocs avec MAMP sous MacOS
  • /var/www sous Linux

Dans ce fichier écrire le code PHP suivant:

<?php phpinfo(); ?>

Puis requêter l’URL http://localhost/phpinfo.php. Vous devez obtenir le résultat suivant:

phpinfo

Utiliser les VirtualHosts

Virtual hosting ou hébergement virtuel est une méthode qui permet d’héberger plusieurs noms de domaine sur un serveur physique utilisant une seule adresse IP. Cela permet de mieux exploiter les ressources (mémoire, processeur) du serveur en les partageant pour les besoins de plusieurs sites.

Virtual Hosting

C’est également une bonne pratique à mettre en place lorsque vous travaillez localement. Cela permet de choisir des noms de domaines différents pour chacun de vos sites par exemple:

  • http://mon_site1
  • http://mon_site2

au lieu des URLs du type

  • http://localhost/mon_site1
  • http://localhost/mon_site2

Cela vous permet également de stocker des sites web sans respecter une arborescence stricte. C’est à vous d’associer à un nom de domaine, un emplacement physique d’un site sur le système de fichiers du serveur.

Voici à quoi ressemble la déclaration d’un Virtual Host pour apache. Remplacer local.domain par le nom de domaine que vous souhaitez utiliser et domain_path par l’emplacement physique du dossier contenant les fichiers du site web à associer.

<VirtualHost *:80>
    ServerName local.domain
    ServerAdmin webmaster@local.domain.fr

    DocumentRoot /home/user/workspace/domain_path

    <Directory /home/user/workspace/domain_path>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
   </Directory>

    ErrorLog /var/log/apache2/error_local.domain.log
    # Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
    LogLevel warn
    CustomLog /var/log/apache2/access_local.domain.log combined
</VirtualHost>
Après chaque modifications dans les fichiers de configuration d’apache, pensez à redémarrer le service pour que les nouveaux paramètres soient pris en compte.

Pour redémarrer le service apache sur système Debian et dérivés (Ubuntu, …)

$ sudo /etc/init.d/apache2 restart

ou

$ sudo service apache2 restart

Modifier une entrée DNS localement: Ajouter une ligne dans le fichier hosts

Le Domaine Name System DNS est un service permettant d’établir une correspondance entre une adresse IP et un nom de domaine. Lorsque vous saisissez une URL dans votre navigateur, votre ordinateur va réaliser une résolution de nom c’est à dire récupérer l’adresse IP associée au domaine demandé. Cette adresse IP ainsi obtenue va permettre ensuite d’envoyer une requête HTTP à destination du bon serveur. Il est également possible de définir localement des couples Adresse IP <-> Nom de domaine.

DNS resolution

Lors d’une résolution DNS votre ordinateur va commencer par faire une 1] Resolution local, c’est à dire rechercher si l’entrée DNS recherchée est définie localement. Si oui, utilisation de cette adresse, sinon il va effectuer une 2] Résolution distante. Le serveur DNS interrogé retournera la reponse si il connait l’association recherchée, sinon il interrogera un autre serveur DNS et ainsi de suite jusqu’à l’obtention de 3] La réponse. L’ordinateur à l’origine de la demande mettra 4] En cache la réponse ainsi obtenue pour d’éventuelles futures requêtes et pourra ainsi contacter le serveur corespondant au domaine recherché.

Pour définir localement une association entre une adresse IP et un nom de domaine il faut ajouter une entrée dans le fichier ‘hosts’.

Dans le cas d’un développement local, pour associer l’adresse local.domain à votre propre machine c’est à dire le localhost il faut ajouter l’entrée 127.0.0.1 local.domain.

Sous système Debian et dérivés (Ubuntu, …), éditer le fichier hosts:

$ sudo vi /etc/hosts

Puis ajouter l’association Adresse IP <-> Nom de domaine souhaitée.

127.0.0.1       local.domain

Pour vérifier la prise en compte de votre changement par votre système, effectuer une requête ping. Vous devez obtenir le résultat suivant:

$ ping local.domain
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.041 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.033 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.033 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.027 ms
....

Si vous obtenez le message suivant:

$ ping local.domain
ping: unknown host local.domain

C’est que vous n’avez pas ajouté correctement l’entrée dans votre fichier hosts.

Paramètrer MySQL

MySQL est un SGBDR (Système de Gestion de Base de Donnée Relationnelle). C’est un logiciel libre développé sous double licence en fonction de l’utilisation qui en est faite :

  • Dans un produit libre: licence publique générale GNU (GPL)
  • Dans un produit propriétaire: licence payante

Pour les applications comme WordPress, Joomla, Drupal, PrestaShop, Magento, … il faudra renseigner, durant la phase d’intallation, les informations pour la connexion à la base de donnée MySQL.

Une bonne pratique consiste à créer un utilisateur avec des accès bien définis sur une base, plutôt que d’utiliser le même compte sur toutes les bases (par exemple le compte root). Cela permet un meilleur cloisonnement et offre ainsi une meilleure sécurité. Ce n’est pas une obligation dans un environnement de développement mais vivement recommandé dans un environnement ‘dit’ de production. Pour cela vous pouvez utiliser l’outil phpMyAdmin, accessible depuis un navigateur, et procéder comme suit:

Privileges

Nouveau utilisateur

Ajouter utilisateur

Go

L’URL d’accès à votre phpMyAdmin est différente suivant votre système d’exploitation ou suivant votre configuration. Sous système Debian ou dérivés (Ubuntu, …) il est accessible depuis l’URL suivante: http://localhost/phpmyadmin

Vous pouvez également exécuter les requêtes SQL suivantes en replaçant user par le nom de l’utilisateur que vous voulez créer et *** par le mot de passe

CREATE USER 'user'@'%' IDENTIFIED BY '***';

GRANT USAGE ON * . * TO 'user'@'%' IDENTIFIED BY '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

CREATE DATABASE IF NOT EXISTS `user` ;

GRANT ALL PRIVILEGES ON `user` . * TO 'user'@'%';

En résumé vous venez de créer une base nommée user et vous avez créé un utilisateur user avec le mot de passe user disposant de tous les droits sur cette base.

host: localhost
nom de la base de donnée: user
utilisateur: user
mot de passe: user

Ces informations vous seront demandées lors de l’installation d’une application PHP qui utilise le SGBDR MySQL pour stocker des données.

Si vous souhaitez une assistance pour la mise en place d’un environnement de développement pour vos équipes ou encore une aide pour le déploiement et la migration de votre site, vous pouvez nous contacter.

1 commentaire pour "Mettre en place un environnement de développement pour réaliser un site avec PHP et MySQL"

  • Par Benoît

    le 22/11/2011 @ 12:00

    Très bon article avec une belle approche technique qui n’empêche pourtant aucunes incompréhensions, bravo!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*