par Alexandre Alapetite le 2003-07-02 ; mise à jour 2007-04-25

Configurer PHP5.2 avec Apache2.2

Pour héberger un site Web dynamique, il faut un serveur Web et un langage de programmation côté serveur. Pour cela, je vais présenter respectivement Apache2.2 et PHP5.2. Tous deux sont de grands classiques.

Ma configuration est sécuritaire, sans être paranoïaque.
Mon site se trouve dans D:\www\, Apache2 dans E:\httpd\apache2\ et PHP5 dans E:\httpd\php5\. À vous de changer cela en fonction de votre configuration.
Cette documentation est prévue pour Windows, mais reste valide avec peu de changements sous Linux.
Voilà ci-dessous les changements que j’opère sur les fichiers de configuration de Apache2 et PHP5.

Autres versions :


Apache2

Installation :

Commencer par télécharger la dernière version Win32 Binary de Apache2.
Pour cette documentation, j’ai utilisé apache_2.2.4-win32-x86-no_ssl.msi

Exécutez l’installation.

Note pour Windows Vista : Vous devez lancer le .msi en tant que administrateur. Pour cela, ouvrez une session Windows en tant que pur administrateur, ou bien suivez la procédure suivante :

  1. Ouvrez une “invite de commandes” en mode administrateur
    • Cherchez le raccourci “invite de commandes” dans votre menu démarrer
    • Clic-droit, Exécuter en tant qu’administrateur
  2. Placez vous dans le répertoire où se trouve le fichier .msi que vous venez de télécharger
    • cd /D "C:\Users\VotreNom\download\"
    • Astuce : utilisez la touche Tab pour compléter le nom des répertoires, quand vous avez tapé les premières lettres
    • Faites dir pour vérifier que le .msi se trouve bien dans ce répertoire
  3. Exécutez le fichier .msi depuis la console
    • msiexec /i apache_2.2.4-win32-x86-no_ssl.msi
    • Astuce : utilisez la touche Tab pour compléter le nom du fichier .msi, quand vous avez tapé les premières lettres
  4. L’installation commence

Il vaut mieux être connecté à Internet durant cette opération pour laisser l’installateur détecter certains paramètres, mais vous pouvez aussi bien les saisir à la main.
Pendant l’installation, vous pouvez laisser les options par défaut, sauf le répertoire d’installation, où je vous conseille un répertoire court et sans caractères spéciaux (espaces), comme E:/httpd/
Comme noms de réseau et de machine vous pouvez mettre localhost si vous ne faites pas un serveur avec une adresse publique.

Vous aurez de toutes manières la possibilité de revenir sur ces paramètres plus tard.

Si vous avez une alerte de votre pare-feu (firewall) à la fin de l’installation, vous devez donner votre autorisation à Apache.

Vous pouvez aussi vérifier les réglages du pare-feu Windows manuellement :
[Pare-feu Windows]

Contrôler le démarrage :

Avec ces options par défaut, sous Windows NT (2000 et plus), Apache va être installé sur le port HTTP standard 80, et être lancé automatiquement en tant que service lors du démarrage de l’ordinateur.
Si vous souhaitez démarrer vous même Apache lorsque vous le souhaitez, passez le service Apache2 en mode manuel grâce aux outils d’administration, comme dans la figure ci-dessous.
Vous pourrez ensuite lancer et arrêter Apache à partir de cette même fenêtre, ou plutôt grâce aux raccoucis installés dans le Menu démarrer ou encore grâce au petit utilitaire Monitor Apache Servers que vous pouvez trouver dans Menu démarrer et en mini-icône à côté de l’heure dans la barre des tâches. D’ailleurs, si vous ne voulez pas que Monitor Apache Servers se lance au démarrage, enlevez le raccourci dans Menu démarrer>Programmes>Démarrage

Clic-droit sur “Poste de travail”>“gérer”
[Service Apache2 en manuel]

Note pour Windows Vista :

  1. Modifiez le raccourci Monitor Apache Servers
    • Faites un clic-droit/propriétés sur le raccourci Monitor Apache Servers de Apache dans le menu démarrer
    • Dans l’onglet Compatibilité
      • Cocher Exécuter ce programme en mode de compatibilité pour Windows XP (Service Pack 2)
      • Cocher Exécuter ce programme en tant qu’administrateur
  2. Modifiez le raccourci Start
    • Faites un clic-droit/propriétés sur le raccourci Start de Apache dans le menu démarrer
    • Dans l’onglet Compatibilité, cocher Exécuter ce programme en tant qu’administrateur

Nous allons maintenant configurer Apache et préparer l’intégration de PHP.

Les fichiers httpd.conf et mime.types pour Apache 2.2 se trouvent dans le répertoire d’installation d’Apache, sous-répertoire ./conf/

Configuration générale :

Vous devez vérifier ou modifier les lignes décrites ci-dessous.

httpd.conf

42 	ServerRoot "E:/httpd/Apache2"
   	#Port TCP sur lequel Apache écoute
53	Listen 80
115	#sauter une ligne pour plus tard
   	#Votre adresse courriel
134	ServerAdmin vous@example.net
   	#si la machine n’a pas de DNS fixe, mettre un nom comme localhost:80
143	ServerName serveur.example.net:80
150	DocumentRoot "D:/www"
161	Options None
178	<Directory "D:/www">
   	#Permet l’inclusion - ou HTML dynamique - côté serveur (voir mime.types pour shtml en text/html)
191	Options Indexes IncludesNoExec FollowSymLinks
   	#Fichiers pouvant être utilisés par défaut dans un dossier, comme http://www.serveur.fr/dossier/
213	DirectoryIndex index.html.var index.php index.shtml index.html
   	#Journal d’activité au format ECLF  (-> Plus d’informations sur ma page logresolve)
261	CustomLog logs/access.log combined
298	#sauter une ligne pour plus tard
313	#sauter 7 lignes pour plus tard
   	#Pour PHP
393	AddType application/x-httpd-php .php .php5
394	AddType application/x-httpd-php-source .phps
   	#Pour les fichiers négociés .var (ex: choix de langue)
407	AddHandler type-map var
   	#Pour les inclusions côté serveur .shtml
416	AddOutputFilter INCLUDES .shtml
417	#sauter 2 lignes pour plus tard

Il y a deux manières d’utiliser PHP5 avec Apache2 : sous forme de module intégré, ou de programme externe CGI. Choisissez un de ces deux modes.


Pour le mode module Sapi :

Ce mode est recommandé sous Windows NT 5.0 et plus (2000, XP, Vista…).

httpd.conf

   	;Module pour Apache 2.2
115	LoadModule php5_module "E:/httpd/php5/php5apache2_2.dll"

Pour le mode CGI :

Ce mode ne devrait être utilisé que si le mode module ne fonctionne pas.

httpd.conf

   	#vous pouvez éventuellement choisir un alias un peu différent de /php5/
   	#comme /xkzt2/ pour éviter de potentielles attaques.
298	ScriptAlias /php5/ "E:/httpd/php5/"
   	#droits d’accès au répertoire de PHP (copie du modèle cgi-bin des lignes juste au dessus)
313	<Directory "E:/httpd/php5">
314		AllowOverride None
315		Options None
316		Order allow,deny
317		Allow from all
318	</Directory>
   	#mieux vaut choisir un alias un peu différent comme /xkzt2/php-cgi.exe
417	Action application/x-httpd-php "/php5/php-cgi.exe"

N.B. : En mode CGI, il est possible et recommandé de placer le fichier php.ini dans le répertoire de PHP, au même endroit que ./php5/php-cgi.exe


Configuration générale (suite) :

mime.types

   	#Ajouter les extensions de fichiers, non reconnus par ailleurs, à envoyer en mode binaire.
   	#Trouver si possible un type MIME plus approprié
54 	application/octet-stream	bin dms lha lzh exe class so dll dmg rar dat
   	#Ajouter les extensions de fichiers, non reconnus par ailleurs, à envoyer en mode texte.
   	#Trouver si possible un type MIME plus approprié
533	text/plain	asc txt
   	#Exemple pour le MIME-HTML, qui a son type MIME exact.
523	multipart/related	mhtml
   	#HTML dynamique serveur : shtml
531	text/html	html htm shtml
   	#NB : il n’y a pas besoin d’ajouter les .php car PHP se déclare tout seul en text/html (cf. php.ini).

Plus d’options :

httpd.conf

   	#À modifier pour permettre les modifications locales par .htaccess
198	AllowOverride All

Voir ma documentation sur les redirections HTTP utilisant .htaccess à ce sujet.


Autres Limites (facultatif) :

Le but des lignes suivantes est d’expliquer la limite de 8Mo des fichiers uploadés par PHP sous Apache. Il n’est pas nécessaire d’en tenir compte.

extra/httpd-default.conf

0  	#Les numéros des lignes suivantes sont des numéros suggérés. Ce seront des nouvelles lignes.
   	#Les 2 paramètres suivants permettent de limiter la taille maximale d’une requête HTTP (GET, POST, …)
   	#Ce sont des limites de taille des fichiers téléchargés par POST en PHP.
   	#Une limite haute est fixée à la compilation de Apache à 8190Ko dans httpd.h
98 	#LimitRequestLine: Limit on bytes in Request-Line (Method+URI+HTTP-version).
99 	#Maximum value set by DEFAULT_LIMIT_REQUEST_LINE in httpd.h to 8190KB
   	#Limite la longeur en octets de la requête HTTP.
100	#LimitRequestLine 8190
101
102	#LimitRequestFieldsize: Limit on bytes in any one header field.
103	#Maximum value set by DEFAULT_LIMIT_REQUEST_FIELDSIZE in httpd.h to 8190KB
   	#Limite la longeur en octet d’un paramètre de la requête HTTP. Doit être inférieur à LimitRequestLine.
104	#LimitRequestFieldsize 8190
105
106	#LimitRequestBody: Limit on bytes in Request-Line.
   	#Ce paramètre permet de limiter LimitRequestLine de manière localisée (par exemple dans un .htaccess).
   	#Doit être inférieur à LimitRequestLine.
107	#LimitRequestBody 8190
108
109	#LimitRequestFields: Limit on number of request header fields.
   	#Ce paramètre permet de limiter le nombre de paramètres d’une requête HTTP.
   	#Il peut être augmenté au delà de la valeur par défaut de 100 et peut aussi être modifié dans un .htaccess
110	#LimitRequestFields 100

PHP5

Commencer par télécharger la dernière version de PHP5.
Prendre la version ZIP package ; pour cette documentation, j’ai utilisé php-5.2.1-Win32.zip

Modifications de php.ini à partir de ./php.ini-recommended pour PHP 5.2.1 Win32 sous Apache2.2

Général :

   	;C’est ce fichier php.ini qui va être configuré ci-dessous
0  	;Copier ./php.ini-recommended en %systemroot%/php.ini comme C:\Windows\php.ini ou C:\WINNT\php.ini

N.B. : Si vous utilisez le mode CGI, il est possible et recommandé de placer le fichier php.ini dans le répertoire de PHP, au même endroit que ./php5/php-cgi.exe

php.ini

    	;Désactive les tags php courts <? … ?> problématiques pour le XML (maintenant désactivé par défaut)
128 	short_open_tag = Off
    	;Mode plus restrictif mais plus sûr.
    	;Mais attention, peut poser des problèmes de compatibilité avec certains scripts.
214 	safe_mode = On
    	;Arborescence sous laquelle PHP est authorisé à accéder aux fichiers.
    	;Vous pouvez avoir des répertoires plus restreints pour _exec_dir par exemple.
225 	safe_mode_include_dir = "D:/www/"
229 	safe_mode_exec_dir = "D:/www/"
250 	open_basedir = "D:/www/"
    	;Liste des variables d’environnement que l’utilisateur a le droit de modifier.
239 	safe_mode_allowed_env_vars = PHP_ TZ
    	;Fonctions potentiellement dangereuses, à désactiver.
255 	disable_functions = exec,highlight_file,passthru,popen,proc_open,shell_exec,show_source,system
    	;Temps d’exécution maximum d’un script PHP.
300 	max_execution_time = 60
    	;Durée maximale accordée au client pour envoyer les données.
    	;À augmenter si vous utilisez l’envoi de fichiers.
301 	max_input_time = 90
    	;Voir upload_max_filesize ligne 573
468 	post_max_size = 8M
    	;Racine du site. À spécifier pour plus de sécurité.
    	;Mais attention, peut poser problème en cas de racines multiples, et de répertoires alias.
522 	;doc_root = "D:/www/"
    	;Répertoire où sont situées les php_*.dll nécessaires aux fonctionnalités supplémentaires.
529 	extension_dir = "E:/httpd/php5/ext/"
    	;Protection CGI. (À désactiver sous le serveur Microsoft IIS)
531 	cgi.force_redirect = 1
    	;Taille maximale des fichiers qui peuvent être envoyés depuis un client par HTTP avec POST.
    	;Penser à augmenter max_input_time et memory_limit en conséquence.
    	;Cette taille est aussi limitée par la configuration Apache avec LimitRequestBody à presque 8Mo par défaut.
573 	upload_max_filesize = 7M
    	;Fuseau horaire utilisé. Voir la liste des fuseaux horaires supportés.
683 	date.timezone = "Europe/Paris"
    	;Emplacement pour la gestion des sessions. Attention, le répertoire indiqué doit exister.
    	;Sous Windows 2000, utiliser "C:/WINNT/Temp"
1011	session.save_path = "C:/WINDOWS/Temp"

Pour le développement personnel :

php.ini

   	;Désactive la temporisation de sortie (buffers). Permet de mieux voir les erreurs de header(),
   	;et de vérifier la compatibilité avec les serveurs ayant cette configuration.
146	output_buffering = Off
   	;Affiche les avertissements de syntaxe stricte.
349	error_reporting = E_ALL | E_STRICT
   	;Permet d’afficher les erreurs directement sur la page. À désactiver après le débogage.
356	display_errors = On
361	display_startup_errors = On

Fonctionnalités supplémentaires :

Voici les fonctionnalités supplémentaires les plus courantes, et utiles.

php.ini

	;Permet l’utilisation des fonctions graphiques
637	extension=php_gd2.dll
	;Gestion des chaînes multi-octets telles Unicode
644	extension=php_mbstring.dll
	;SQLite est une base de données dans un fichier unique, sans serveur
655	extension=php_pdo.dll
663	extension=php_pdo_sqlite.dll
670	extension=php_sqlite.dll
   	;Permet la détection réelle du navigateur, ainsi que ses capacités.
   	;À utiliser avec la fonction get_browser()
   	;On peut savoir si cette fonction est active par : if (get_cfg_var('browscap')) …
   	;Plus d’information avec mon implémentation autonome de get_browser() pour Browscap en PHP.
0  	;Télécharger php_browscap.ini sur http://browscap.org/
	;et renommer le fichier en ./extras/browscap.ini
942	browscap = "E:/httpd/php5/extras/browscap.ini"

Lancer et tester que cela marche :

Il faut maintenant démarrer Apache. Lancez l’utilitaire Monitor Apache Servers dont un raccourci a été créé dans le menu démarrer. Si besoin, cliquez sur Start.

Vérifiez alors que tout marche.
Créez un fichier phpinfo.php à la racine de votre site, pour moi D:\www\phpinfo.php et y coller (avec un éditeur de texte comme Notepad, pas un traitement de texte comme Word) le texte suivant :

phpinfo.php

<?php
 phpinfo();
?>

Avec votre navigateur Internet, essayez d’accéder à http://localhost/phpinfo.php et une page devrait s’afficher avec un grand nombre de renseignements sur votre configuration.


Foire aux questions

Voici une liste de problèmes classiques, à prendre dans l’ordre pour diagnostiquer l’erreur et la résoudre.

Le port http TCP/80

Symptômes : En lançant Apache, vous avez éventuellement un message d’erreur (disant que le port 80 est déjà utilisé). En essayant d’accéder à une page de votre nouveau serveur, comme http://localhost/phpinfo.php, vous obtenez une page qui n’a rien à voir ou une page blanche. En affichant le code source de la page Web, ce n’est pas votre code source PHP qui s’affiche.

Solution : Il est possible qu’un autre service utilise déjà le port http (80), et empêche Apache de fonctionner. Il peut s’agir d’un autre serveur Web, comme Microsoft IIS, ou bien d’un autre logiciel, tel Skype. Il faut alors arrêter ces autres logiciels, ou leur spécifier de ne pas utiliser le port 80. Pour Skype par exemple, [Outils/Options…/Connexion/Utiliser les ports 80 et 443 comme alternative]. Alternativement, il est possible de démarrer Apache sur un autre port que 80, comme 8080, au niveau des directives Listen et ServerName et vous pouvez alors accéder à votre page avec une adresse comme http://localhost:8080/phpinfo.php.


L’extension .php

Symptômes : L’exemple phpinfo.php ci-dessus ne marche pas, et le code source s’affiche éventuellement dans le navigateur Web. En affichant le code source de la page Web, votre code source PHP est visible.

Solution : Vérifiez que le nom des fichiers de vos scripts PHP se termine bien avec une extension en .php ou .php5 et surtout pas avec une extension .txt ou .html. Attention, sous Windows, les extensions sont cachées par défaut : dans une fenêtre Windows, voir [Outils/Options des dossiers…/Affichage/Paramètres avancés/Fichiers et dossiers/Masquer les extensions dont des fichiers dont le type est connu]. Si vous utilisez d’autres extensions, comme .php3, ajoutez-les à la suite des autres extensions dans l’instruction AddType application/x-httpd-php de httpd.conf.


La balise <?php

Symptômes : L’exemple phpinfo.php ci-dessus fonctionne, mais pas vos autres fichiers PHP. Une page blanche ou des bouts de votre code source PHP s’affichent dans la fenêtre du navigateur. En affichant le code source de la page Web, votre code source PHP est visible.

Solution : Dans la configuration présentée sur cette page, les tags courts <? … ?> sont désactivés, comme il est recommandé. Vérifiez que vos scripts PHP utilisent bien des tags complets <?php … ?> ou bien activez la directive short_open_tag dans php.ini.


Les modules d’extensions

Symptômes : Vos scripts PHP fonctionnent, mais plusieurs fonctions sont indisponibles.

Solution : Vérifiez que ces fonctions ne font pas parti de la liste des fonctions interdites par les instructions disable_functions ou disable_classes. Vérifiez que vous avez activé les extensions dont vous avez besoin. Vérifiez que vos scripts sont compatibles PHP/5, sinon vous pouvez installer PHP/4 ou rendre vos scripts compatibles PHP/5.

Voir aussi :


Voir aussi la FAQ pour PHP/4 (obsolète).


Licence

Ce contenu est protégé par une licence Creative Commons Paternité - Partage des Conditions Initiales à l’Identique 2.0 France “BY-SA (FR)” [Creative Commons License]


Commentaires

object : Commentaires

https://alexandre.alapetite.fr

Retour