par Alexandre Alapetite le 2003-09-01 ; mise à jour 2006-08-20

Configurer PHP4 avec Apache2.0

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.0 et PHP4. 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 PHP4 dans E:\httpd\php4\. À 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 PHP4.

Cette version est obsolète !
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.0.59-win32-x86-no_ssl.msi

Pour Windows, je recommande de rester à Apache 2.0.x en attendant que PHP > 4.4.4 soit bien compatible avec Apache 2.2.x. Sinon, utilisez PHP uniquement en mode CGI.

Exécutez l'installation. 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.


Contrôler le démarrage :

Avec ces options par défaut, sous Windows2000 (NT) et plus, Apache va être installé sur le port 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]

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

Les fichiers httpd.conf et mime.types pour Apache 2.0.59 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

57 	ServerRoot "E:/httpd/Apache2"
   	#Port TCP sur lequel Apache écoute
120	Listen 80
173	#sauter une ligne pour plus tard
   	#Votre adresse courriel
199	ServerAdmin vous@example.net
   	#si la machine n'a pas de DNS fixe, mettre un nom comme localhost:80
213	ServerName serveur.example.net:80
229	DocumentRoot "D:/www"
240	Options None
254	<Directory "D:/www">
   	#Permet l'inclusion - ou HTML dynamique - côté serveur (voir mime.types pour shtml en text/html)
268	Options Indexes IncludesNoExec FollowSymLinks
   	#Fichiers pouvant être utilisés par défaut dans un dossier, comme http://www.serveur.fr/dossier/
322	DirectoryIndex index.html.var index.php index.shtml index.html
   	#Journal d'activité au format ECLF  (-> Plus d'informations sur ma page logresolve)
430	CustomLog logs/access.log combined
517	#sauter une ligne pour plus tard
530	#sauter 7 lignes pour plus tard
   	#Pour PHP
765	AddType application/x-httpd-php .php .php4
766	AddType application/x-httpd-php-source .phps
   	#Pour les inclusions côté serveur
802	AddOutputFilter INCLUDES .shtml
811	#sauter une ligne 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...).

httpd.conf

   	;Module pour Apache 2.0.x (pas compatible Apache 2.2.x)
173	LoadModule php4_module "E:/httpd/php4/sapi/php4apache2.dll"

Pour le mode CGI :

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

httpd.conf

   	#mieux vaut choisir un alias un peu différent de /php4/ comme /xkzt2/ pour éviter de potentielles attaques.
517	ScriptAlias /php4/ "E:/httpd/php4/"
   	#droits d'accès au répertoire de PHP
530	<Directory "E:/httpd/php4">
531		AllowOverride None
532		Options None
533		Order allow,deny
534		Allow from all
535	</Directory>
   	#mieux vaut choisir un alias un peu différent comme /xkzt2/php.exe
811	Action application/x-httpd-php "/php4/php.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 php.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
275	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.

httpd.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

PHP4

Commencer par télécharger la dernière version de PHP4.
Prendre la version zip package ; pour cette documentation, j'ai utilisé php-4.4.4-Win32.zip

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

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
0  	;Copier ./php4ts.dll dans %systemroot%/System32/
0  	;Copier ./dll/iconv.dll dans %systemroot%/System32/
php.ini

   	;Désactive les tags php courts <? ... ?> problématiques pour le XML
89 	short_open_tag = Off
   	;Mode plus restrictif mais plus sûr.
172	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.
183	safe_mode_include_dir = "D:/www/"
187	safe_mode_exec_dir = "D:/www/"
208	open_basedir = "D:/www/"
   	;Liste des variables d'environnement que l'utilisateur a le droit de modifier.
197	safe_mode_allowed_env_vars = PHP_ TZ
   	;Fonctions potentiellement dangereuses, à désactiver.
213	disable_functions = exec,highlight_file,passthru,popen,proc_open,shell_exec,show_source,system
   	;Temps d'exécution maximum d'un script PHP.
244	max_execution_time = 60
   	;Durée maximale accordée au client pour envoyer les données.
   	;À augmenter si vous utilisez l'envoi de fichiers.
245	max_input_time = 90
   	;Mémoire maximale utilisée par un script.
246	memory_limit = 12M
   	;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.
436	;doc_root = "D:/www/"
   	;Répertoire où sont situées les php_*.dll nécessaires aux fonctionnalités supplémentaires.
443	extension_dir = "E:/httpd/php4/extensions/"
   	;Protection CGI. (À désactiver sous le serveur Microsoft IIS)
454	cgi.force_redirect = 1
   	;Corrige pour le mode CGI les erreurs contenues dans SCRIPT_FILENAME et PATH_TRANSLATED
472	cgi.fix_pathinfo = 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.
504	upload_max_filesize = 7M
   	;Emplacement pour la gestion des sessions. Attention, le répertoire indiqué doit exister.
   	;Sous Windows 2000, utiliser "C:/WINNT/Temp"
832	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.
107	output_buffering = Off
   	;Permet d'afficher les erreurs directement sur la page. A désactiver après le débogage.
292	display_errors = On
297	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
0  	;Copier ./dll/gds32.dll dans %systemroot%/System32/
569	extension=php_gd2.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 ./extra/browscap.ini
786	browscap = "E:/httpd/php4/extra/browscap.ini"

Si vous activez d'autres extensions, vous aurez certainement besoin de copier d'autres fichiers de ./dll/ vers %systemroot%/System32/


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.

Les DLLs

Symptômes : Apache affiche un message d'erreur au lancement, disant qu'une extension n'a pas été trouvée, même si le chemin affiché pointe vers un fichier qui existe bien.

Solution : Relire la documentation ci-dessus : il vous faut placer le fichier E:/httpd/php4/php4ts.dll et les fichiers E:/httpd/php4/dlls/*.dll (tous ne sont pas nécessaires, selon les extensions utilisées) dans %systemroot%/System32/


Voir la suite dans la FAQ pour PHP/5.


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