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 :
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 :
- 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
- 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
- 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
- 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.
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
Note pour Windows Vista :
- 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
- 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/
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.
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"
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
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).
httpd.conf #À modifier pour permettre les modifications locales par .htaccess 198 AllowOverride All
Voir ma documentation sur les redirections HTTP utilisant .htaccess à ce sujet.
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
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
;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"
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
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"
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.
Voici une liste de problèmes classiques, à prendre dans l’ordre pour diagnostiquer l’erreur et la résoudre.
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.
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.
<?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.
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 :
get_browser()
autonome pour BrowscapVoir aussi la FAQ pour PHP/4 (obsolète).
Ce contenu est protégé par une licence
Creative Commons Paternité - Partage des Conditions Initiales à l’Identique 2.0 France “BY-SA (FR)”