Configurer PHP3 pour Apache sur Windows NT

Sommaire

    1. Sommaire
    2. Installation de PHP
    3. Configuration de PHP
      1. [PHP_3]
      2. [mail function]
      3. [LoadExtensions]
    4. Configuration d'Apache
    5. Tests
      1. Test local
      2. Test distant
    6. Problemes courants
        1. vous obtenez un Internal Server Error ( HTTP 500 )
        2. Le navigateur affiche le code source de la page plutot que la page interpretée.
        3. Le navigateur ouvre une fenetre popup "Unknown File Type / Enregistrez le fichier sous"
        4. Vous obtenez un Bad Request Error ( HTTP 400 )
        5. "Fatal error: Unable to load dynamic library 'xxx.dll' "
        6. Coté serveur, une fenetre Popup explique qu'un fichier xxx.dll est introuvable dans le PATH
    7. Sources

Installation de PHP

Installer le binaire php-3_ORCx-win32.exe, en suivant les directives. L'installation devrait creer un répertoire C:\php.

Copier les fichiers php.exe, *.dll de ce repertoire dans [SERVER_ROOT]/cgi-bin/

IC:\Apache

Configuration de PHP

Editer le fichier php3.ini situé sour WinNT/.

Il y a quelques changements a faire dans les sections suivantes:

[PHP_3]

Cette section regroupe les directives générales de PHP

Pour avoir une trace des logs d'erreurs, utile au moins le temps de l'installation :

log_errors=1 ; Log errors into a log file (server-specific log, stderr, or error_log (below)) track_errors=0 ; Store the last error/warning message in $php_errormsg (boolean) error_log=c:\Apache\logs\php3.log ; log errors to specified file

Vérifier la directive cgi_ext, qui définit l'extension utilisé pour les fichiers scripts PHP, nous utiliserons php3 ici

; file extensions (meaningless in UNIX) cgi_ext=php3

Note:l'extension doit etre identique à celle définie dans la config Apache vue plus loin. isapi_ext est l'extension utilisée pour PHP3 utilisé en API sur un serveur IIS ( encore en developpement) nsapi_ext est l'extension utilisée pour PHP3 utilisé sur un serveur Netscape

Si vous pensez utiliser le téléchargement de fichier ( upload files ), la directive suivante définie le repertoire temporaire ou seront stockés ces fichiers.

upload_tmp_dir=c:\temp ; temporary directory for HTTP uploaded files

[mail function]

Si vous utilisez la fonction intégrée mail() , changez:

SMTP=[votre serveur mail (SMTP), par ex. mail.myprovider.net] sendmail_from=[l'adresse email de l'administrateur PHP]

[LoadExtensions]

Cette section regroupe quelles extensions DLL doivent etre chargées par défaut. Les fichiers .DLL sont situées dans [SERVER_ROOT\cgi-bin], etant donné que vous les avez copié en A. Par exemple, pour utiliser la librairie GD ( fonctions graphique ), ajouter:

extension=gd.dll

Note: Si vous en faites un usage ponctuel, il est plutot conseillé d'utiliser dl() dans le script PHP.

Configuration d'Apache

On suppose que: le serveur Apache est situé dans le repertoire ``c:\Apache''. les scripts PHP ont l'extension .php3

Editer le fichier de configuration Apache httpd.conf situé sous SERVER_ROOT/conf/ .

Note: Editer access.conf dans les versions d'Apache antérieures à la 1.3.5

Vérifiez la configuration du repertoire cgi-bin. il doit comporter la directive ExecCGI, qui autorise l'execution de programme :

<Directory "C:/Apache/cgi-bin"> AllowOverride None Options ExecCGI </Directory>

Note: Editer srm.conf dans les versions d'Apache antérieures à la 1.3.5

Vérifier ou ajouter la directive qui déclare votre répertoire cgi-bin

ScriptAlias /cgi-bin/ "C:/Apache/cgi-bin/"

Ajouter la directive déclarant un MIME-Type pour les scripts PHP3: Le format est AddType [mime-type] [file extension]

AddType application/x-httpd-php3 .php3

Ajouter la directive qui associe le moteur phph (php.exe) avec ce MIME-type

Action application/x-httpd-php3 "/cgi-bin/php.exe"

Note: Cette directive autorisera les urls simplifiés du type http://server/directory/my_script.php3 plutot que l'urls longue: http://server/cgi-bin/php.exe/directory/my_script.php3

Sauvegarder httpd.conf, et redémarrez Apache.

Tests

Creer un script de test simple, et enregistrez le sous [SERVER_ROOT]/htdocs/test.php3.

Code:

<? echo "Hello, world\n"; ?>

Test local

Le but de ce test est d'isoler un probleme spécifique du à PHP ( versus ceux du au serveur HTTP) Ouvrir un Shell DOS dans le repertoire ou se trouve test.php3 is, et tester le script:

C:\[PATH]>c:\apache\cgi-bin\php.exe test.php3 Content-type: text/html Hello, world

Si vous n'obtenez pas les lignes ci-dessus, vérifiez PHP3.INI. Vous pourrez passer au test distant une fois le probleme est réglé.

Test distant

Ouvrez un navigateur, pointez-le sur l'URL de votre script, dans notre exemple http://localhost/test.php3

Si vous n'obtenez pas de réponse, vérigfiez le fichier d'erreurs Apache: error_log. Vérifiez également le fichier de log PHP ( [SERVER_ROOT]/logs/php3.log si vous avez suivi les intructions en B). Il peuvent vous donner quelques indications.

Problemes courants

Cette section regroupe des problemes (et leur solution :) de configuration couramment rencontrés.

Note: A chaque changement de la configuration d'Apache, vous devez redémarrez le serveur

vous obtenez un Internal Server Error ( HTTP 500 )

Une raison possible est que le fichier php3.ini file n'est pas sous le repertoire [WinNT].

-> Copiez Apache/cgi-bin/php3.ini-dist vers WinNT/php3.ini, et configurez-le. [ configuration de PHP ]

Le navigateur affiche le code source de la page plutot que la page interpretée.

-> Verifiez que les directives AddType et Action sont correctment définies dans httpd.conf. [ Configuration d'Apache ]

Le navigateur ouvre une fenetre popup "Unknown File Type / Enregistrez le fichier sous"

Apache ne reconnait pas correctement le MIME-type associé à PHP3.

-> Vérifiez que vous avez le même mime-type (application/x-httpd-php3) dans les directives AddType et Action

Vous obtenez un Bad Request Error ( HTTP 400 )

Cela arrive lorque la directive Action contient une erreur de sysntaxe sur le chemin.<br>

-> Vérifiez que la directive Action est juste [ Apache Configuration ]

( [warn] handler ``php3-script'' not found for: [php file] )

This warning in Apache/log/error_log, is often not an error. It appears also when the AddHandler directive is defined. It seems to be a cosmetic bug in Apache.

"Fatal error: Unable to load dynamic library 'xxx.dll' "

a) Vous avez mal défini le chemin ou PHP recherche les librairies dynamiques (DLL).

-> Vérifiez la directive extension_dir dans php3.ini

Example: extension_dir=c:\Apache\cgi-bin

b) Pensez également que depuis la version 3.03 de PHP, les fichiers librairies ont tous été préfixées avec php_. ( ie gd.dll renommé en php3_gd.dll ). Cette erreur peut apparaitre ``brusquement'' avec des scripts PHP existants lors de l'upgrade de PHP.

Coté serveur, une fenetre Popup explique qu'un fichier xxx.dll est introuvable dans le PATH

PHP n'est pas livré avec toutes les DLL utilisées par les librairies dynamiques.

-> Rechercher le fichier xxx.dll (en utilisant la fonction Rechercher de NT par exemple )

-> Déplacer la librairie manquante dans le chemin, par exemple sous [WIN]\System32.

-> Si vous ne trouvez pas la DLL, il vous reste a contacter le NG news:fr.comp.infosystemes.auteur.php ou bien la mailing-list PHP.

Sources

Configuration Apache

http://www.apache.org/docs/

PHP3

http://www.php.net/FAQ.php

http://www.php.net/manual/

This document written by Leo West - 1998/99

Questions sur Apache + PHP3 sur plateforme Win32 @ mailto:lwest@free.fr