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 :
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.
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
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/
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.
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"
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
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 275 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.
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
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.
;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"
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
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/
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 : 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.
Ce contenu est protégé par une licence
Creative Commons Paternité - Partage des Conditions Initiales à l'Identique 2.0 France "BY-SA (FR)"