Introduction

Pour réaliser le développement d’un site web en PHP, il vous faut la chaîne complète client/serveur HTTP. Plusieurs solutions s’offrent à vous :

  • le serveur est présent en local sur votre machine de développement (localhost). Le plus souvent sous Linux, la racine des documents du serveur se trouvent en /var/www/ . Et l’accès par le navigateur se fait à l’adresse : http://localhost/ ou http://votre-adresse-ip/
  • le serveur est présent sur l’intranet de votre structure de développement (entreprise, école, université, domicile, …). Le serveur de la section est configuré pour un accès pour chaque compte. La racine se trouve dans votre répertoire personnel $HOME/public_html/ et l’accès client se fait par exemple à l’adresse : http://192.168.52.85/~$LOGIN/
  • le serveur est présent sur l’Internet, le plus souvent chez un hébergeur. Dans ce cas, il faut transférer les documents de votre poste de développement vers le serveur Internet (le plus souvent en FTP).

Ce document présente l’installation d’Apache, un serveur HTTP, et de PHP sous Linux (Ubuntu 12.04 LTS).

Remarque : LAMP est un acronyme désignant un ensemble de logiciels libres permettant de construire des serveurs de sites web. L’acronyme original se réfère aux logiciels suivants : Linux (l’OS GNU/Linux), Apache (le serveur Web), MySQL (le serveur de base de données) et PHP (le langage de script). Il existe aussi une architecture WAMP utilisée pour développer des sites web sur une machine Windows.

Apache HTTP Server

Le logiciel libre Apache HTTP Server (Apache) est un serveur HTTP créé et maintenu au sein de la fondation Apache. C’est le serveur HTTP le plus populaire du World Wide Web.

La version 2 d’Apache propose entre autres le support de plusieurs plates-formes (Windows, Linux et UNIX, Solaris, BSD, MAC OS X), le support de processus légers UNIX (threads), une nouvelle API et le support IPv6. [Source : http://fr.wikipedia.org/]

Installation rapide

$ sudo apt-get install apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php5 php5-common

Remarque : sinon l’installation du paquet phpmyadmin déclenchera par le jeu des dépendances l’installation d’Apache, MySQL et PHP !

Installation détaillée

Vérifier la présence du serveur web Apache :

// Présence des paquets Apache et de son module PHP
$ dpkg -l | grep -i apache

// Le serveur web Apache est-il démarré ?
$ sudo service apache2 status

Deux versions du logiciel Apache (1.3 et 2.2) sont disponibles. On installera la version plus récente.

L’installation du paquet apache2 entraîne l’installation par défaut de apache2-mpm-worker, une version particulière de ce serveur web.

$ sudo apt-get install apache2
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances       
Lecture des informations d'état... Fait
Les paquets supplémentaires suivants seront installés :
  apache2-mpm-worker apache2-utils apache2.2-bin apache2.2-common libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap ssl-cer
...

Remarque : Le paquet apache2 ne contient rien, il sert simplement à s’assurer qu’une des versions de Apache 2 est effectivement installée.

Les différentes versions d’Apache 2 se distingue par la politique qu’ils emploient pour gérer le traitement parallèle d’un grand nombre de requêtes. On connaît trois modes de fonctionnement qui changent notamment les performances du serveur HTTP : les modes Prefork, Worker et Event.

  • Historiquement, Apache fonctionne en Prefork, ce qui signifie qu’un processus père démarre préalablement des processus enfants qui traiteront chacun un certain nombre de requêtes clients. Cependant, sous Linux, la multiplication des processus provoque une augmentation de consommation de ressources (mémoire, descripteurs de fichiers).

  • En mode Worker, Apache lance des threads (des processus légers) qui géreront les demandes entrantes. La différence est qu’il s’agit d’un mode plus préemptif dans lequel le processus père prépare les ressources pour ses threads. Certains modules développés par des tiers, ou des librairies utilisées par ces modules, peuvent parfois ne pas être prévus pour fonctionner dans un environnement multi-thread, et dans ce cas peuvent provoquer des problèmes si on les utilise en conjonction avec le mode Worker.

  • Depuis la version 2.4, le module Event est disponible en production. C’est un fonctionnement derivé du mode Worker à ceci près que les threads ne desservent pas seulement une connexion client mais peuvent réaliser plusieurs tâches indépendamment de la connexion. Plus simplement, le thread dessert une requête et non pas une connexion.

Une fois l’installation terminée, on peut vérifier l’état du serveur HTTP Apache :

// Le serveur web Apache est-il démarré ?
$ sudo /etc/init.d/apache2 status
Apache2 is running (pid 4060).

// Ou :
$ sudo service apache2 status
$ sudo apachectl status

Configuration

La configuration d’Apache est située dans le répertoire /etc/apache2/ :

        /etc/apache2/
        |-- apache2.conf
        |       `--  ports.conf
        |-- mods-enabled
        |       |-- *.load
        |       `-- *.conf
        |-- conf.d
        |       `-- *
        `-- sites-enabled
                `-- *

Remarque : Comme toujours sous Linux, les fichiers de configuration sont de simples fichiers “texte” ASCII éditables avec un éditeur de texte comme vim, emacs, nano, …

La plupart de ces fichiers sont plus ou moins spécifiques à Debian/Ubuntu et permettent de séparer la configuration en plusieurs parties :

  • httpd.conf est le fichier utilisé par Apache 1, il est conservé vide dans Apache 2 pour assurer la rétrocompatibilité. On ne l’utilisera pas ;
  • apache2.conf est le fichier principal de configuration et il contient les directives de configuration. Il se charge aussi d’inclure les autres fichiers de configuration ;
  • ports.conf contient la directive Listen qui spécifie les adresses et les ports d’écoutes ;
  • envvars est utilisé pour définir des variables d’environnement propres à Apache, magic est lui utilisé pour déterminer le type de contenu d’un document en regardant les quelques premiers octets de ce contenu ;
  • conf.d est un répertoire qui contient plusieurs fichiers qui seront analysés par apache. Par exemple, le fichier charset permettra de spécifier l’encodage à utiliser par défaut pour tous les fichiers ;
  • mods-available contient la liste des modules d’apache disponibles ;
  • mods-enabled celle des modules activés ;
  • sites-available contient la liste des vhosts (Virtual Host) disponibles ;
  • sites-enabled celle des vhosts (Virtual Host) activés.

L’ensemble de ces fichiers définissent une configuration par défaut qui rend le serveur HTTP Apache fonctionnel dès le départ.

// Port d'écoute du serveur ?
# cat /etc/apache2/ports.conf | grep -i "listen"
Listen 80

// Racine des documents web du serveur ?
# cat /etc/apache2/sites-enabled/000-default | grep -i "root"
DocumentRoot /var/www

Conclusion : par défaut, le serveur web écoute sur le port 80 (Listen) et renvoie les pages web depuis le répertoire /var/www/ (DocumentRoot). Pour l’instant, il est accessible à partir de localhost (using 127.0.1.1 for ServerName).

Modules

Apache est un serveur modulaire et la plupart des fonctionnalités sont implémentées dans des modules externes que le programme charge pendant son initialisation. La configuration par défaut n’active que les modules les plus courants et les plus utiles.

La liste complète des modules standards d’Apache est disponible sur le site : http://httpd.apache.org/docs/2.2/mod/index.html

La commande a2enmod <module> permet d’activer un nouveau module tandis que a2dismod <module> désactive un module. Ces deux programmes ne font rien d’autre que de créer ou supprimer des liens symboliques dans /etc/apache2/mods-enabled/ pointant vers des fichiers de /etc/apache2/mods-available/.

Apache 2.2 intègre en standard le module SSL nécessaire au support du HTTP sécurisé (HTTPS). Il faut juste l’activer avec a2enmod ssl puis placer les directives de configuration nécessaires dans la configuration. Un exemple de configuration est fourni dans /usr/share/doc/apache2.2-common/examples/httpdssl.conf.gz.

Lire : http://httpd.apache.org/docs/2.2/mod/mod_ssl.html

Pour Apache 1.3, le support de SSL nécessite l’installation du paquet libapache-mod-ssl. Les instructions dans le fichier /usr/share/doc/libapache-mod-ssl/README.Debian détaillent la configuration de ce module.

Tests

// Version installée ?
$ sudo apache2 -v
Server version: Apache/2.2.22 (Ubuntu)
Server built:   Jul 12 2013 13:37:01

Attention : La version d’Apache installée sur les nouvelles distributions d’Ubuntu est la version 2.4.6-2. Ce changement de version implique des changements de certaines directives. Lire : http://httpd.apache.org/docs/2.4/upgrading.html. Cette page décrit, en détails, les changements entre la version 2.2 et la version 2.4.

// Existe-t-il une page d'accueil ?
$ ls -l /var/www/
total 12
drwxr-xr-x  2 root root 4096 mars   6 17:35 ./
drwxr-xr-x 14 root root 4096 mars   6 17:18 ../
-rw-r--r--  1 root root   73 mars   6 17:35 index.html

On modifie la page d’accueil existante du serveur web :

$ sudo vim /var/www/index.html 
<html><body><h1>It works!</h1>
<p>En construction ...</p>
</body></html>

Tester dans le navigateur avec l’URL http://127.0.0.1/

En cas d’erreur 403 (Forbidden), il vous faut évidemment vérifier tout d’abord les droits d’accès (XX5 pour les répertoires et XX4 pour les fichiers). En cas de présence d’une directive Directory sur /var/www dans apache2.conf pour une version 2.4.6-2 d’Apache, il vous faut appliquer la règle : Require all granted au lieu de Require all denied.

Documentation en ligne : http://httpd.apache.org/docs/2.2/fr/ ou http://httpd.apache.org/docs/2.4/fr/.

Voir aussi : Un TP sur Apache

PHP

PHP est un langage de programmation de scripts côté serveur permettant de produire des pages web dynamiques.

Les scripts PHP :

  • sont de simples fichiers “texte” (extension conseillée .php) à créer avec un éditeur de texte
  • contiennent du code PHP mélangeables à du code HTML
  • sont exécutés côté serveur par un “interpréteur” php (parser php)

Généralement, PHP sert à produire des pages web dynamiques et donc à récupérer et traiter des informations issues d’une base de données, d’un système de fichiers (contenu de fichiers et de l’arborescence) ou plus simplement des données envoyées par le navigateur (url, formulaire, …).

Le code PHP doit être inséré entre des balises <?php et ?>. Le script doit porter une extension reconnue par le serveur (extension conseillée .php).

Vérifier la présence des paquets PHP.

// Présence des paquets PHP (au moins php5-common et php5-mysql)
$ dpkg -l | grep -i php

Il faut installer le paquetage libapache2-mod-php5 pour activer le support PHP dans Apache. On peut aussi installer (au minimum) les paquets suivants (avec le support mysql et sqlite pour PHP) :

$ sudo apt-get install libapache2-mod-php5 php5-common php5-mysql php5-sqlite

Remarque : Cela entraîne la suppression de apache2-mpm-worker et l’installation de apache2-mpm-prefork, tout en préservant la configuration du serveur précdemment installé. En effet, PHP ne fonctionne qu’avec cette version du serveur web.

On peut constater que le module PHP5 a été installé et activé :

$ sudo ls -l /etc/apache2/mods-enabled/php*
lrwxrwxrwx 1 root root 27 mars  19 08:55 /etc/apache2/mods-enabled/php5.conf -> ../mods-available/php5.conf
lrwxrwxrwx 1 root root 27 mars  19 08:55 /etc/apache2/mods-enabled/php5.load -> ../mods-available/php5.load

$ sudo cat /etc/apache2/mods-enabled/php5.load 
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

$ sudo ls -l /usr/lib/apache2/modules/libphp5.so
-rw-r--r-- 1 root root 9040032 mars   1 00:39 /usr/lib/apache2/modules/libphp5.so

Pour vérifier que le moteur PHP est fonctionnel, on va créer un script phpinfo.php dans /var/www/ :

<?php

phpinfo();

?>

Tester dans le navigateur avec l’URL http://127.0.0.1/phpinfo.php

Manuel PHP : https://php.net/manual/fr/