I. Premiers pas
1. Introduction
2. Installation
4. Sécurité
I.
Premiers pas
Chapitre 1. Introduction
Le PHP,
qu'est ce que c'est ?
Le PHP est un langage de script server qui s'inclue dans le
language HTML.
A question simple, réponse simple. Mais qu'est ce que cela
signifie ?
Prenons un exemple:
Prenons un exemple:
Exemple 1-1. Un exemple simple
<html><head><title>Exemple</title>
<body>
<?php
echo "Bonjour, je suis un scrpit PHP"; ?>
</body></html>
|
Il est à noter la différence avec les autres scripts CGI
écrit dans d'autres langages tels que le Perl ou le C -- Au lieu d'écrire un
programme avec de nombreuses lignes de commandes afin d'afficher une page HTML,
vous écrivez une page HTML avec du code inclu à l'intérieur afin de réaliser
une action précise (dans ce cas là, afficher du texte). Le code PHP est inclus
entre un tag de début et un tag de fin qui permettent au navigateur de passer
en "mode PHP".
Ce qui distingue le PHP des languges de script comme le
Javascript est que le code est exécuté sur le serveur. Si vous avez un script
similaire sur votre serveur, le client ne reçoit que le résultat du script,
sans aucun moyen d'avoir accès au code qui a produit ce ré. Vous pouvez
configurer votre serveur web afin qu'il analyse tous vos fichiers HTML comme
des fichiers PHP. Ainsi, il n'y a aucun moyen de distinguer les pages qui sont
produites dynamiquement des pages statiques.
Que peut
vous apporter le PHP ?
Le language PHP possède les même fonctionnalités que les
autres languages permettant d'écire des scripts CGI, comme collecter des
donnée, générer dynamiquement des pages web ou bien envoyer et recevoir des
cookies.
La plus grande qualité et le plus important avantages du
language PHP est le support d'un grand nombre de bases de données. Réaliser une
page web dynamique interfacant une base de donnés; est extrêmement simple. Les
bases de donnés;es suivantes sont supportées par le language PHP:
Adabas D
|
InterBase
|
Solid
|
dBase
|
mSQL
|
Sybase
|
Empress
|
MySQL
|
Velocis
|
FilePro
|
Oracle
|
Unix dbm
|
Informix
|
PostgreSQL
|
Le language PHP inclue le support des services utilisant les
protocoles tel que IMAP, SNMP, NNTP, POP3 ou encore HTTP. Vous pouvez également
ouvrir des connections et interagir en utilisant d'autres protocoles.
La génèse
du PHP
Le language PHP a été concue durant l'automne 1994 par Rasmus
Lerdorf. Les premières versions (qui restèrent privées) étaient utilisées afin
de savoir qui venait consulter son CV en ligne. La première version public fut
disponible au début de l'année 1995. Elle fut connue sous le nom de
"Personal Sommaire Page Tools". Elle était composée d'un parseur
extrêmement simple qui ne reconnaissait que quelques marco spéciales et d'un
petit nombre d'utilities courament utilisées dans les pages web. Un guestbook,
un compteur, etc... Le parseur fut réécrit durant l'été 1995 et fut appelé
PHP/FI Version 2. FI etaient les initiales d'un autre package que Rasmus avait
écrit qui interprétait les formulaires HTML. C'est alors qu'il combina le
"Personnal Sommaire Page tools" avec le "Form Interpreter"
et il y ajouta le support de mSQL: c'est comme cela que naquît PHP/FI. PHP/FI
grandit de manière spectaculaire et de nombreuses personnes commencèrent à
contribuer à son amélioration.
Il est relativement peu aisée de donner des statistiques,
mais on estime que PHP/FI est utilisé sur 15 000 sites web dans le monde
entier, fin 1996. Ce chiffre atteint 50 000 durant l'été 1997. L'été 1997 voit
aussi un profond changement dans le développemnt du PHP: d'un projet personnel
à Ramsus on passa alors a une projet d'équipe. Le parseur fut de nouveaux
réécrit par Zeev Suraskyi et Andi Gutmans et ce nouveau parseur forma la base
de la version 3 du PHP. Une grande partie du code de PHP/FI fut complètement
réécrit alors que l'autre partie fut portée pour donner le PHP Version 3.
Aujourd'hui (été 1999) PHP/FI ou PHP3 sont distribués avec
de nombreux produit commerciaux comme "C2's StrongHold web server" et
"RedHat Linux" et il est admis (d'après les chiffres de NetCraft) que
le PHP est utilisés sur 150 000 sites web dans le monde entier. Pour comparaison,
ce chiffre est supérieur au nombre de serveur tournant sous "Netscape's
flagship Enterprise server" sur l'Internet.
Enfin, à l'heure est ce document est rédigé, la nouvelle
génération du PHP est en cours de création. Elle utilisera les qualités de Zend
pour améliorer les performances et améliorera le support des seveurs web autre
que Apache.
Chapitre
2. Installation
Télécharger
la version la plus récente
Le code source ainsi que des binaires pour certaines
plates-formes (notamment Windows), sont disponibles à l'adresse suivante: http://www.php.net/.
Installation
sous UNIX
Ce chapitre va vous aider lors de la configuration et de
l'installation du PHP. Les connaissances nécessaires sont les suivantes :
·
Connaissances basiques d'UNIX
·
Avoir un compilateur C installé
·
Avoir installé un serveur web
Installation
rapide (Version Module Apache)
1. gunzip apache_1.3.x.tar.gz
2. tar xvf apache_1.3.x.tar
3. gunzip php-3.0.x.tar.gz
4. tar xvf php-3.0.x.tar
5. cd apache_1.3.x
6. ./configure --prefix=/www
7.
cd ../php-3.0.x
8.
./configure --with-mysql --with-apache=../apache_1.3.x
--enable-track-vars
9.
make
10. make install
11. cd ../apache_1.3.x
12. ./configure --prefix=/www
--activate-module=src/modules/php3/libphp3.a
13. make
14. make install
A
la place de cette étape, vous pouvez simplement écraser le binaire
httpd. Assurez-vous d'avoir bien arrÆté
le demon d'abord.
15. cd ../php-3.0.x
16. cp php3.ini-dist
/usr/local/lib/php3.ini
Vous
pouvez éditer le fichier de configuration /usr/local/lib/php3.ini.
Si vous préférez installer le fichier
dans un autre répertoire,
il faut utiliser l'option de
configuration --with-config-file-path=/path
à l'étape 8.
17.
Editez le fichier de configuration apache httpd.conf or srm.conf et ajoutez :
AddType application/x-httpd-php3
.php3
Ici, il faut choisir l'extension que vous
souhaitez donner au fichier php.
.php3 est simplement celle que nous
suggérons.
18.
Utilisez la procédure normale afin de démarrer le serveur Apache. (Vous
devez impérativement arrêter et
redémarrer le serveur Apache, et pas
seulement le relancer à l'aide d'un
signal HUP ou USR1).
Configuration
Il y a deux moyens de configurer PHP.
·
Utilisations du script
"setup" qui est fourni avec la distribution PHP. Ce script vous pose
une serie de question (comme le script d'installation de PHP/FI 2.0) et lance
le script "configure" à la fin. Afin de lancer le script, tapez
./setup.
Ce script va aussi créer un
fichier appelé "do-conf", qui contient les options de configuration.
Vous pouvez éditer ce fichier afin de modifier certaines options sans avoir a
réexécuter la totalité du script "setup". Dans ce cas là, tapez
./do-conf afin de lancer le script "configure" avec les nouvelles
options.
·
Lancez le script
"configure" à la main. Pour voir toutes les options de configuration
disponible, tapez ./configure --help.
Tous les détails à propos des différentes options de
configuration sont regroupés ici:
Module Apache
Pour compiler PHP comme un module Apache, répondre
"yes" à la question "Build as an Apache module ?"
(correspond à l'option de configuration --with-apache=
DIR) et spécifie la racine de la
distribution Apache. Si vous avez décompressé Apache dans le répertoire
/usr/local/www/apache_1.2.4, c'est la racine de la distribution Apache. Le
répertoire par défaut est : /usr/local/etc/httpd.
Module fhttpd
Pour compiler PHP comme un module fhttpd, répondre
"yes" à la question "Build as an fhttpd module ?" (correspond
à l'option de configuration --with-fhttpd= DIR et spécifie la racine de la
distribution fhttpd. Le répertoire par défaut est: /usr/local/src/fhttpd. Si
vous utilisez fhttpd, compiler PHP en module vous permettra d'obtenir des
performances supérieures, plus de controle et la possibilité d'exécution à
distance.
Version CGI
Par défaut, PHP est compilé comme une CGI. Si vous voulez
que votre serveur web supporte le PHP, compiler le PHP comme une CGI permet
d'obtenir de meilleures performances. Cependant, la version CGI permet les
utilisateurs de lancer des script PHP sous leur UID respectives. Lisez
attentivement le chapitre
consacré à la Sécurité si vous souhaitez utilisé cette solution.
Configuration pour le support des bases de données
PHP supporte de nombreuses bases de données (comme ODBC)
Adabas D
--with-adabas=DIR
Configure PHP pour le support des bases de données Adabas D.
Le paramètre est le répertoire d'installation de la base de données et par
défaut /usr/local/adabasd.
dBase
--with-dbase
Configure PHP pour le support des bases de données dbase.
Aucune librairie n'est nécessaire.
filePro
--with-filepro
Configure PHP pour le support des bases de données filePro.
Aucune librairie n'est nécessaire.
mSQL
--with-msql=DIR
Compile PHP pour le support des bases de données mSQL. Le
paramètres est le répertoire d'installation de la base de données et par défaut
/usr/local/Hughes. C'est le répertoire par défaut où est installé mSQL 2.0.
configure détecte automatiquement quelle version de mSQL est installé. PHP
supporte aussi bien la version 1.0 que la version 2.0, mais si vous compilez
PHP avec mSQL 1.0, vous pourrez accéder uniquement à mSQL 1.0, et vice-versa.
Voir aussi Configuration
de mSQL au chapitre fichier
de configuration.
MySQL
--with-mysql=DIR
Compile PHP pour le support des bases de données MySQL. Le
paramètre est le répertoire d'installation de la base de données et par défaut
/usr/local. C'est le répertoire par défaut où est installé MySQL.
Voir aussi Configuration
de MySQL au chapitre fichier
de configuration.
iODBC
--with-iodbc=DIR
Compile PHP pour le support des bases de données iODBC.
Cette fonction a été développée au départ pour supporter "iODBC Driver
Manager", un driver ODBC qui fonctionne sous la plupart des versions
d'UNIX. Le paramètre est le répertoire d'installation de la base de données et
par défaut /usr/local.
OpenLink ODBC
--with-openlink=DIR
Compile PHP pour le support des bases de données OpenLink
ODBC. Le paramètre est le répertoire d'installation de la base de données et
par défaut /usr/local/openlink.
Oracle
--with-oracle=DIR
Compile PHP pour le support des bases de données Oracle.
Cette option fonctionne avec les versions 7.0 à 7.3 d'Oracle. Le paramètre est
le répertoire d'installation de la base de données et par défaut ORACLE_HOME.
Vous n'avez pas à spécifier ce paramètres si votre base de données Oracle est
déjà installée.
PostgreSQL
--with-pgsql=DIR
Compile PHP pour le support des bases de données PostgreSQL.
Le paramètre est le répertoire d'installation de la base de données PostgreSQL
et par défaut /usr/local/pgsql.
Voir aussi Configuration
de Postgres au chapitre fichier
de configuration file.
Solid
--with-solid=DIR
Compile PHP pour le support des bases de données Solid. Le
paramètre est le répertoire d'installation de la base de données et par défaut
/usr/local/solid.
Sybase
--with-sybase=DIR
Compile PHP pour le support des bases de données Sybase. Le
paramètre est le répertoire d'installation de la base de données et par défaut
/home/sybase.
Voir aussi Configuration
Sybase au chapitre fichier
de configuration.
Sybase-CT
--with-sybase-ct=DIR
Compile PHP pour le support des bases de donnés Sybase-CT.
Le paramètre est le répertoire d'installation de la base de données Sybase-CT
et par défaut /home/sybase.
Voir aussi Configuration
Sybase-CT au chapitre fichier
de configuration.
Velocis
--with-velocis=DIR
Compile PHP pour le support des bases de données Velocis. Le
paramètre est le répertoire d'installation de la base de données Velocis et par
défaut /usr/local/velocis.
Autre librairie ODBC
--with-custom-odbc=DIR
Compile PHP pour le support d'une autre libraire ODBC. Le
paramètre est le répertoire d'installation de la base de données et par défaut
/usr/local.
Cette option impliques que vous aillez définie la variable
CUSTOM_ODBC_LIBS avant de lancer le script de configuration. Vous devez aussi
avoir une fichier odbc.h quelques part dans votre répertoire d'installation. Si
vous n'en avez pas, créez en un et inclué dedans vos header. Vos headers
demanderons sûrement des définitions supplémentaire, notamment en cas de base
de données multiplateforme. Définissez les dans la variable CFLAGS.
Par exemple, vous pouvez utiliser Sybase SQL n'import où
sous QNX en définissant la variable CFLAGS comme suit: CFLAGS=-DODBC_QNX
LDFLAGS=-lunix CUSTOM_ODBC_LIBS="-ldblib -lodbc" ./configure
--with-custom-odbc=/usr/lib/sqlany50
ODBC unifié
--disable-unified-odbc
Invalide le module ODBC unifié, qui est une interface
commune a toutes les bases de données doté d'une interface ODBCn tel que Solid
et Adabas D. Cela fonctionne aussi les librairies classique ODBC. Cela a été
testé avec iODBC, Solid, Adabas D and Sybase SQL, sous tous les types d'OS.
Cela implique qu'un et un seule des modules ou le module Velocis est utilisé ou
bien une librairie personnel ODBC. Cette option n'est valide que si une des
options suivantes est utilisée: --with-iodbc, --with-solid, --with-adabas, --with-velocis, or --with-custom-odbc,
Voir aussi Configuration
du module ODBC unifié au chapitre fichier
de configuration.
LDAP
--with-ldap=DIR
Ajoute le
support LDAP (Lightweight Directory Access Protocol). Le paramètre est
le répertoire d'installation de LDAP et par défaut /usr/local/ldap.
Autres options de configuration
--with-mcrypt=DIR
--with-mcrypt
Ajoute le support de la librairie mcrypt. Consulter la
documentation concernant mcrypt pour
plus d'information. Si vous utilisez le paramètre optionnel, DIR , PHP cherchera le fichier mcrypt.h
dans le répertoire DIR/include.
--enable-sysvsem
--enable-sysvsem
Ajoute le support des sémaphores Sys V (supportés par la
plupart des versions d'UNIX) Consulter la documentation concernant "Semaphore and
Shared Memory" pour plus d'information.
--enable-sysvshm
--enable-sysvshm
Ajoute le support pour la memoire partagée. (supporter par
la plupart des versions d'UNIX) Consulter la documentation concernant "Semaphore and
Shared Memory" pour plus d'information.
--with-xml
--with-xml
Ajoute le support du parseur XML en utilisant la librairie expat de James Clark. Voir
aussi les références
aux fonctions XML pour plus de renseignements.
--enable-maintainer-mode
--enable-maintainer-mode
Ajoutes des dépendences supplémentaires ainsi que des
options de compilation utilisées par certains développeurs du language PHP.
--with-system-regex
--with-system-regex
Cette option les expressions régulières du PHP en lieu et
place de celles fournis avec le language. Si vous compilez PHP comme module
serveur, vous devez utilisez la même librairie lorsque vous compilez PHP et
lorsque vous le linker au serveur. Vous pouvez ajouter cette option si la
librairie systeme ajoute de fonctionnalités supplémentaire dont vous avez
besoin. Dans le cas contraire, il est recommendé d'utiliseer la librairie
fournis avec le language.
--with-config-file-path
--with-config-file-path=DIR
Le répertoire spécifié en paramètre est utilisé lorque PHP
cherche le fichier
de configuration au démarrge du PHP.
--with-exec-dir
--with-exec-dir=DIR
Permet l'execution des programmes qui se trouve dans le
répertoire DIR lorsque l'option "safe mode" est activée. Par défaut,
DIR = /usr/local/bin. Cette option ne permet pas de modifier la valeur par
défaut. Cette valeur peut être modifiée avec la directive safe_mode_exec_dir
dans le fichier
de configuration.
--enable-debug
--enable-debug
Ajoute la possibilité d'obtenir des informations
complémentaires. Il est alors possible d'obtenir plus d'informations quand il y
a des problemes avec PHP. (Il est à noter que cela n'a rien à voir avec des
facilitées de débuggage ou des informations à propos des scripts PHP.)
--enable-safe-mode
--enable-safe-mode
Active le "safe mode" par défaut. Cela imposes de
nombreuses restrictions sur les fonctionnalités du PHP, concernant notamment
l'ouverture des fichiers. Consultez le chapitre sur la
sécurité pour avoir plus de renseignements. Si vous compilez PHP comme CGI,
vous devriez toujours activer le "safe mode". Cela active l'option
par défaut. Ce mode peut être activé ou désactivé en utilisant la directive safe_mode
dans le fichier
de configuration.
--enable-track-vars
--enable-track-vars
Permet au PHP de stocker dans les tableaux HTTP_GET_VARS,
HTTP_POST_VARS et HTTP_COOKIE_VARS les informations recues par les méthodes
GET/POST ou bien en provenance d'un cookie. Cela active l'option par défaut.
Cette option peut être activée ou désactivée grÅce à la directive track_vars
dans le fichier
de configuration.
--enable-magic-quotes
--enable-magic-quotes
Acitve l'option "magic quotes" par défaut. Cela
active l'option par défaut. Cette option peut être activée ou désactivée grÅce
à la directive magic_quotes_runtime
dans le fichier
de configuration. Voir aussi les directives
magic_quotes_gpc et magic_quotes_sybase.
--enable-debugger
--enable-debugger
Permet d'utiliser le débugger interne du PHP. Cette
fonctionnalité est encore au stade expériementale. Voir aussi la directive Debugger
Configuration dans le fichier fichier
de configuration.
--enable-discard-path
--enable-discard-path
Si cette option est activée, le binaire du PHP (dans le cas
d'une compilation comme CGI) peut être placée en toute sureté à l'extérieur de
l'arborescence du serveur web. Les utilisateurs ne pourront pas aller au delà
des règles de sécurité imposée par le fichier ".htaccess". Voir aussi
le chapitre concernant la
sécurité à propos de cette option.
--enable-bcmath
--enable-bcmath
Ajoute les fonctions de précisions mathématiques
arbitraires. Voir aussi l'option bcmath.scale
dans le fichier
de configuration.
--enable-force-cgi-redirect
--enable-force-cgi-redirect
Active une option de sécurité concernant la redirection
interne du serveur web. Si vous utilisez Apache comme CGI, vous devriez
utiliser cette option.
Lorsque vous utilisez PHP comme CGI, PHP vérifie toujours
par défaut qu'il est utilisé par redirection. (par exemple, sous Apache, en
utilisant les directives "Action Directives"). Cela assure que le
binaire PHP ne peut pas être utilisé pour passer par dessus les procédures
d'authentification du serveur web en appellant une procédure directevement. Par
exemple, http://my.host/cgi-bin/php/secret/doc.html. Dans cette exemple, on
accède à la page http://my.host/secret/doc.html mais cela n'utilise aucune
règle de sécurité pour le répertoire /secret.
Ne pas activer cette option annule la vérification et permet
éventuellement de passser par dessus les procédures d'authentification et de
sécurité du démon httpd. Désactivez cette option uniquement si votre serveur
n'est pas capable d'indiquer si une rédirection sécurisée a été effectué et si
toutes les fichiers sur votre serveur et dans les répertoires utilisateurs
peuvent être accessible de l'extérieure par tout le monde.
Consultez le chapitre consernant la
sécurité a propos de cette option.
--disable-short-tags
--disable-short-tags
Désactive la version courte <? ?> des tags PHP. Vous
devez désactiver la version courte des tags si vous souhaitez utiliser le PHP
avec XML. Si vous désactivez la version courte des tags, les seuls tag PHP
acceptés sont <?php ?>. Cette option établie la valeur par défaut. Elle
peut être activée ou désactivée ave la directive short_open_tag
dans le fichier
de configuration.
--enable-url-includes
--enable-url-includes
Ajoute la possibilité d'exécuter du code PHP à partir d'un
autre serveur HTTP ou FTP directement grÅce à la fonction include().
Vois aussi l'option include_path
dans le fichier
de configuration.
--disable-syntax-hl
--disable-syntax-hl
Annule la surbrillance de la syntaxe.
CPPFLAGS and LDFLAGS
Pour que, lors de la compilation et de l'installation, PHP
cherche les diférents fichiers ou librairies dans des répertoires précis, vous
devez modifier les variables d'environnement CPPFLAGS et LDFLAGS. Si vous
utilisez un shell "sensible" (???), vous pouvez aussi exécuter la
commande LDFLAGS=-L/my/lib/dir CPPFLAGS=-I/my/include/dir ./configure
Compilation
Lorsque vous avez exécuté le script de configuration, vous
êtes prêt pour compiler le PHP comme module ou bien comme CGI. La commande make
devrait s'occuper de la compilation. Si cela ne fonctionne pas correctement,
vous trouverez dans le paragraphe
problemes de nombreuses réponses aux problèmes courant de compilation.
Test
Si vous avez compilé PHP comme CGI, vous pouvez vérifier que
votre compilation c'est bien déroulée en tapant la commande make test. C'est
toujours une bonne idée de test si la compilation c'est bien déroulée. Dans ce
sens, vous serez capable de détecter une erreur à la source au lieu de chercher
des erreurs le problèmes plutard.
Benchmark
Si vous avez compilé PHP comme CGI, vous pouvez utiliser le
script de benchmark en tapant la commande make bench. Il est a noté que si le
"safe mode" est activé, le bench ne pourra pas se finir si
l'exécution prend plus que les 30 secondes permises. Cela tient au fait que la
fonction set_time_limit()
ne peut pas être utilisé lorsque le "safe mode" est activé. Utilisez
la directive max_execution_time
pour contrúler le temps d'exécution dans vos scripts. make bench ne tient pas
compte du fichier
de configuration.
Installation on Windows 95/98/NT systems
This
install guide will help you install and configure PHP on your Windows 9x/NT
webservers. This guide was compiled by Bob Silva.
The latest revision can be found at http://www.umesd.k12.or.us/php/win32install.html.
This guide provides installation support for:
·
Personal Web Server (Newest version recommended)
·
Internet Information Server 3 or 4
·
Apache 1.3.x
·
Omni HTTPd 2.0b1
Configuration Changes for PHP
All modules
are now prefixed with 'php3_'. You will need to change your php3.ini file and/or any scripts loading extensions
with the dl() function (or you could always remove the
'php3_' prefix). This will prevent confusion between php modules and their
supporting libraries.
The ChangeLog, FAQ and
updated documentation can always be found at the offical PHP website or any of
its mirrors.
General
Installation Steps
The
following steps should be performed on all installations before the server
specific instructions.
·
Extract the distribution file to a directory of your choice.
"C:\PHP3\" is a good start.
·
Copy the file, 'php3-dist.ini' to your '%WINDOWS%' directory and rename
it to 'php3.ini'. Your '%WINDOWS%' directory is typically:
·
c:\windows for Windows 95/98
|
c:\winnt
or c:\winnt40 for NT servers
|
·
Edit your 'php3.ini' file:
·
You will need to change the 'extension_dir' setting to point to your
php-install-dir, or where you have placed your 'php3_*.dll' files. ex: c:\php3
·
If you are using Omni Httpd, do not follow the next step. Set the
'doc_root' to point to your webservers document_root. ex: c:\apache\htdocs or
c:\webroot
·
Choose which modules you would like to load when PHP starts. You can
uncomment the: 'extension=php3_*.dll' lines to load these modules. Some modules
require you to have additional libraries installed on your system for the
module to work correctly. The PHP FAQ has more information on where to
get supporting libraries. You can also load a module dynamically in your script
using: dl("php_*.dll");
·
On PWS and IIS, you can set the browscap.ini to point to:
'c:\windows\system\inetsrv\browscap.ini' on Windows 95/98 and 'c:\winnt\system32\inetsrv\browscap.ini'
on NT Server. Additional information on using the browscap functionality in PHP
can be found at this mirror, select the "source" button to see
it in action.
Windows 95/98/NT
and PWS/IIS 3
The
recommended method for configuring these servers is to use the INF file
included with the distribution (php_iis_reg.inf). You may want to edit this
file and make sure the extensions and PHP install directories match your
configuration. Or you can follow the steps below to do it manually.
WARNING:
These steps involve working directly with the windows registry. One error here
can leave your system in an unstable state. We highly recommend that you back
up your registry first. The PHP Development team will not be held responsible
if you damage your registry.
·
Run Regedit.
·
Navigate to: HKEY_LOCAL_MACHINE /System /CurrentControlSet /Services
/W3Svc /Parameters /ScriptMap.
·
On the edit menu select: New->String Value.
·
Type in the extension you wish to use for your php scripts. ex: .php3
·
Double click on the new string value and enter the path to php.exe in
the value data field. ex: c:\php3\php.exe %s %s. The '%s %s' is VERY important,
PHP will not work properly without it.
·
Repeat these steps for each extension you wish to associate with PHP
scripts.
·
Now navigate to: HKEY_CLASSES_ROOT
·
On the edit menu select: New->Key.
·
Name the key to the extension you setup in the previous section. ex:
.php3
·
Highlight the new key and in the right side pane, double click the
"default value" and enter phpfile.
·
Repeat the last step for each extension you set up in the previous
section.
·
Now create another New->Key under HKEY_CLASSES_ROOT and name it
phpfile.
·
Highlight the new key phpfile and in the right side pane, double click
the "default value" and enter PHP Script.
·
Right click on the phpfile key and select New->Key, name it Shell.
·
Right click on the Shell key and select New->Key, name it open.
·
Right click on the open key and select New->Key, name it command.
·
Highlight the new key command and in the right side pane, double click
the "default value" and enter the path to php.exe. ex:
c:\php3\php.exe -q %1. (don't forget the %1).
·
Exit Regedit.
PWS and IIS
3 users now have a fully operational system. IIS 3 users can use a nifty tool from
Steven Genusa to configure their script maps.
Windows NT and IIS
4
To install
PHP on an NT Server running IIS 4, follow these instructions:
·
In Internet Service Manager (MMC), select the Web site or the starting
point directory of an application.
·
Open the directory's property sheets (by right clicking and selecting
properties), and then click the Home Directory, Virtual Directory, or Directory
tab.
·
Click the Configuration button, and then click the App Mappings tab.
·
Click Add, and in the Executable box, type: c:\path-to-php-dir\php.exe
%s %s. You MUST have the %s %s on the end, PHP will not function properly if
you fail to do this.
·
In the Extension box, type the file name extension you want associated
with PHP scripts. (You must repeat step 5 and 6 for each extension you want
accociated with PHP scripts. (.php3 and .phtml are common)
·
Set up the appropriate security. (This is done in Internet Service
Manager), and if your NT Server uses NTFS file system, add execute rights for
I_USR_ to the directory that contains php.exe.
Windows 9x/NT and
Apache 1.3.x
You must
edit your srm.conf or httpd.conf to configure Apache to work with the PHP CGI
binary.
Although
there can be a few variations of configuring PHP under Apache, this one is
simple enough to be used by the newcomer. Please consult the Apache Docs
for further configuration directives.
·
ScriptAlias /php3/ "c:/path-to-php-dir/"
·
AddType application/x-httpd-php3
.php3
·
AddType application/x-httpd-php3 .phtml
·
Action application/x-httpd-php3
"/php3/php.exe"
To use the
source code highlighting feature, simply create a PHP script file and stick
this code in: <?php show_source ("original_php_script.php3");
?>. Substitute original_php_script.php3 with the name of the file you wish
to show the source of. (this is only one way of doing it). Note: On Win-Apache
all back slashes in a path statement such as:
"c:\directory\file.ext", must be converted to forward slashes.
Omni HTTPd 2.0b1
for Windows
This has
got to be the easiest config there is:
Step 1: Install Omni server
|
Step 2:
Right click on the blue OmniHTTPd icon in the system tray and select
Properties
|
Step 3:
Click on Web Server Global Settings
|
Step 4:
On the 'External' tab, enter: virtual = .php3 | actual =
c:\path-to-php-dir\php.exe
|
Step 5:
On the Mime tab, enter: virtual = wwwserver/stdcgi | actual = .php3
|
Step 6: Click OK
|
Repeat
steps 2 - 6 for each extension you want to associate with PHP.
PHP Modules
Table 2-1. PHP
Modules
php3_calendar.dll
|
Calendar conversion functions
|
php3_crypt.dll
|
Crypt functions
|
php3_dbase.dll
|
DBase functions
|
php3_dbm.dll
|
GDBM
emulation via Berkely DB2 library
|
php3_filepro.dll
|
READ ONLY
access to filepro databases
|
php3_gd.dll
|
GD
Library functions for gif manipulation
|
php3_hyperwave.dll
|
HyperWave functions
|
php3_imap4r2.dll
|
IMAP 4 functions
|
php3_ldap.dll
|
LDAP functions
|
php3_msql1.dll
|
mSQL 1 client
|
php3_msql2.dll
|
mSQL 2 client
|
php3_mssql.dll
|
MSSQL client (requires MSSQL DB-Libraries
|
php3_mysql.dll
|
MySQL functions
|
php3_nsmail.dll
|
Netscape mail functions
|
php3_oci73.dll
|
Oracle functions
|
php3_snmp.dll
|
SNMP get
and walk functions (NT only!)
|
php3_zlib.dll
|
ZLib functions
|
Problèmes
?
Consultez la FAQ
Certains problèmes sont plus courant que d'autres. La
solutions aux problèmes les plus courants sont rassemblés dans la FAQ PHP , disponibles à
l'adresse http://www.php.net/FAQ.php3
Rapporter un bug
Si vous pensez que vous avez trouvé un bug dans PHP,
veuillez le faire savoir. Les développers PHP ne le connaissent probablement
pas, et si vous ne le faites pas connaitre, il n'y a aucune chance que celui-ci
soit corrigé. Vous pouvez le faire savoir en utilisant le bug-tracking système
à l'adresse http://www.php.net/bugs.php3.
Autres problèmes
Si vous êtes toujours dans l'impasse, il y a probablement
quelqu'un sur la liste de diffusion PHP qui pourra vous aider. Vous devriez
déjà vérifier dans les archives de la liste de diffusion au cas ou quelqu'un
aurait déjà répondu à votre question. Les archives sont accessibles à partir de
la page "support" à l'adresse http://www.php.net/.
Pour s'inscrire sur la liste de diffusion PHP, envoyer un message vide à
l'adresse suivante: php3-subscribe@lists.php.net.
L'adresse de la liste de diffusion est: php3@lists.php.net.
Si vous voulez obtenir de l'aide sur la liste de diffusion,
veuillez essayer de préciser votre environnement (quel OS, quelle version de
PHP, quel serveur web, si vous utilisez PHP comme CGI ou commer module serveur,
etc...), et donnez assez de code afin que les membres de la liste puissent
reproduire votre problème et le tester.
Chapitre
3. Configuration
Table des
matières
Le fichier
de configuration
Le fichier de configuration (appelé php3.ini dans la version
3.0 du PHP, et simplement php.ini dans la version 4.0) est lu par le PHP au
démarrage. Si vous avez compilé PHP en module, le fichier n'est lu qu'une seule
fois, au lancement du démon HTTP. Pour la version CGI le fichier est lu à
chaque invocation.
Lorsque vous utilisez le module Apache vous pouvez aussi
changer les paramètres de configurations en utilisant les directives dans les
fichiers de configuration d'Apache et dans les fichiers ".htaccess".
Dans la version 3.0, à chaque directive de configuration
présente dans le fichier de configuration d'Apache correspond une directive de
configuration dans le fichier php3.ini à l'exception des directives préfixées
par "php3_".
Dans la version 4.0, il n'y a seulement que quelques
directives dans le fichier de configuration d'Apache qui vous permettent de
modifier la configuration de PHP.
php_value
name value
Cette directive affecte une valeur à la variable spécifiée.
php_flag
name on|off
Cette directive est utilisée pour activer ou désactiver l'option
précédente.
php_admin_value
name value
Cette directive affecte une valeur à la variable spécifiée. La
directive "Admin" ne peut être utilisée que dans le fichier de
configuration d'Apache, et non dans un fichier ".htaccess".
php_admin_flag name on|off
Cette directive est utilisée pour activer ou désactiver l'option précédente.
Vous pouvez voir l'état de votre configuration en utilisant
la fonction phpinfo().
Vous pouvez aussi accéder aux valeurs de votre configuration de manière
individuelle en utilisant la fonction get_cfg_var().
Directives
de configuration générale
auto_append_file chaine de caractères
Spécifie le nom du fichier qui est automatiquement lu après le fichier
principale. Le fichier est inclus comme si il avait été appelé avec la fonction
include(),
donc include_path est utilisé.
Le mot réservé none désactive auto-appending.
Note: Si le script s'arrête par la
fonction exit(),
auto-append ne fonctionnera pas.
auto_prepend_file chaine de caractères
Spécifie le nom du fichier qui est automatiquement lu après avant le
fichier principal. Le fichier est inclus comme si il avait été appelé avec la
fonction include(),
donc include_path est utilisé.
Le mot réservé none désactive auto-appending.
cgi_ext chaine de caractères
display_errors booléen
Cette directive détermine si les erreurs doivent être affichées à l'écran
au format HTML ou non.
doc_root chaine de caractères
Fixe la valeur du répertoire racine du PHP sur le serveur. Cette
directive n'est utilisée que s'il n'est pas vide. Si PHP est configuré en safe mode, aucun fichier en dehors de l'arborescence
sous la racine n'est accessible.
engine booléen
Cette directive n'est utile que dans le cas de la compilation du PHP en
tant que module Apache. Elle est utilisée par les sites qui veulent activer ou
désactiver le parsage des fichiers suivant le répertoire ou suivant le serveur
virtuel. En ajoutant php3_engine off
dans le fichier httpd.conf, alors le PHP peut être activé ou désactivé au
plaisir.
error_log chaine de caractères
Nom du fichier ou les erreurs doivent être logger. Si le mot réservé
syslog est utilisé, les erreurs sont envoyées au logger système. Sous Unix,
cela correspond à syslog(3), sous Windows NT cela correspond à "event
log". Il n'y a pas de système de log sous Windows 95/98.
error_reporting valeur numérique
Définit le niveau de reporting des erreurs. Le paramètre est une valeur
numérique repésentant un champs de bits. Ajoutez le niveau d'erreur que vous
voulez.
Tableau 3-1. Niveau de
reporting des erreurs.
Valeur du bit
|
niveau de reporting
|
1
|
erreurs nomrales
|
2
|
warnings normals
|
4
|
erreurs de parsage
|
8
|
warning faible
|
La valeur par défaut pour cette directive est 7 (erreurs normales,
warnings normaux, et erreurs de parsage sont notées).
open_basedir chaine de caractères
Limite les fichiers qui peuvent être ouverts avec le PHP à
l'arborescence spécifié en paramètre.
Lorsqu'un script essaie d'ouvrir un fichier avec, par exemple, la
fonction fopen ou gzopen, la localisation du fichier est vérifiée. Si le
fichier est situé dans un répertoire à l'extérieur de l'arborescence spécifiée,
PHP refuse d'ouvrir ce fichier. Tous les liens symboliques sont suivis, donc il
n'est pas impossible de passer outre cette restriction.
Le mot réservé . indique que seul le répertoire contenant le script
sera utilisé comme "base-directory".
Sous Windows, séparez les répertoires par des ";". Sous tous
les autres système séparez les répertoires par des ":". Si vous avez
compilé PHP comme module Apache, les répertoires héritent du répertoire parent
la valeur de "open_basedir".
Note: Le support pour les
répertoires multiples a été ajouté dans la version 3.0.7.
Par défaut, un script peut ouvrir n'importe quel fichier.
gpc_order chaine de caractères
Etablit l'ordre de préscéance des méthodes GET/POST/COOKIE. Par défaut,
cette directive est établie a "GPC". En affectant "GP" à
cette directive, PHP ignorera les cookies, et écrasera toute méthode GET
utilisée par une méthode POST avec des variables du même nom.
ignore_user_abort chaine de caractères
Désactivée par défaut. Si cette directive est activée, alors tous les
scripts lancés iront jusqu'à leur terme, même si le client se déconnecte en
plein milieu. Voir aussi la fonction ignore_user_abort().
include_path chaine de caractères
Spécifie la liste des répertoires où les fonctions require(),
include()
and fopen_with_path() chercheront leurs fichiers. Le format est le même que les
variables d'environement PATH: une liste de répertoires séparés par des
":" sous UNIX ou des ";" sous Windows.
Exemple 3-1. Include_path sous UNIX
include_path=.:/home/httpd/php-lib
|
Exemple 3-2.
Include_path sous Windows
include_path=".;c:\www\phplib"
|
La valeur par défaut pour cette directive est . (Seulement le
répertoire courant.
isapi_ext chaine de caractères
log_errors booléen
Cette option décrit si oui ou non il faut logger les messages d'erreur.
magic_quotes_gpc booléen
Active l'option "magic_quotes" pour les méthodes GPC
(GET/POST/COOKIE) Lorsque les magic_quotes sont activées, les caractères '
(simple quote), " (double quote), \ (backslash) et NUL sont précédés
automatiquement d'un backslash. Si l'option magic_quotes_sybase est activée,
une simple-quote est précédée d'une autre simple-quote au lieu d'un backslash.
magic_quotes_runtime booléen
Si l'option magic_quotes_runtime
est activée, la plupart des fonctions qui renvoient des datas depuis toutes
sortes de sources externes, comme les bases de données ou les fichiers textes,
auront leur double quotes précédées d'un backslash.
magic_quotes_sybase booléen
Si l'option magic_quotes_sybase
activée, une simple-quote est précédée d'une autre simple-quote au lieu d'un
backslash si l'option magic_quotes_gpc
ou l'option magic_quotes_runtime est
activée.
max_execution_time valeur numérique
Grâce à cette option, vous pouvez donner un temps maximum d'exécution
de votre script, avant qu'il ne soit terminé par le parseur. Cela permet de ne
pas avoir de script qui boucle sur votre serveur.
memory_limit valeur numérique
Grâce à cette option, vous pouvez donner une taille maximum de mémoire
qu'un script peut allouer. Cela permet de ne pas avoir de script qui utilise
toute la mêmoire sur votre serveur.
nsapi_ext chaine de caractères
short_open_tag booléen
Acitve ou désactive l'utilisation des tags court, (<? ?>) Si vous voulez utiliser PHP et XML en même temps, vous
devez désactiver cette option. Si cette option est désactivée, vous devez
utiliser la forme longue des tags, ( <?php
?>).
sql.safe_mode booléen
track_errors booléen
Si cette option est activée, le dernier message d'erreur est présent
dans la variable globale $php_errormsg.
track_vars booléen
Si cette option est activée, lors de l'appel des méthodes GET, POST et
des cookies, les variables sont disponibles dans un tableau associatif global
appelé respectivement $HTTP_GET_VARS, $HTTP_POST_VARS ou $HTTP_COOKIE_VARS.
upload_tmp_dir chaine de caractères
Correspond au répertoire utilisé lors de l'upload d'un fichier. Ce
répertoire doit être accessible en lecture pour l'utilisateur qui lance le
script PHP.
user_dir chaine de caractères
Répertoire où sont stockés les fichiers PHP dans le répertoire d'un
utilisateur. Par exemple, public_html.
warn_plus_overloading booléen
Si cette option est activée, PHP émet un warning lorsque l'opérateur
plus (+) est utilisé sur une chaine de caractères. Cela permet de trouver plus
facilement les scripts qui doivent être réécrit en utilisant l'opérateur de
concaténation (.) plutôt que l'opérateur plus.
Configuration
des directives concernant le mail
SMTP chaine de caractères
Adresse IP ou nom que PHP doit utiliser sous Windows pour envoyer du
mail avec la fonction mail() .
sendmail_from chaine de caractères
Valeur du champs "From:" qui doit être utilisée lors de
l'envoie de mail sous Windows.
sendmail_path chaine de caractères
Localisation du binaire de sendmail, habituellement /usr/sbin/sendmail
ou /usr/lib/sendmail configure essaye de repérer la présence de sendmail et
affecte le résultat par défaut. En cas de problème, vous pouvez établir une
nouvelle valeur par défaut.
Tout système n'utilisant pas sendmail doit établir cette directive à la
valeur chemin du wrapper qui remplace le serveur de mail, si celui-ci existe,
par exemple, Qmail. Dans ce cas la, vous
devez mettre: /var/qmail/bin/sendmail.
Directives
de configuration du "Safe Mode"
safe_mode booléen
Cette directives active ou désactive l'option "safe mode".
Lisez le chapitre
Sécurité pour plus d'informations.
safe_mode_exec_dir chaine de caractères
Si l'option "safe mode" est activée, system()
et les autres fonctions exécutant des programmes systèmes refusent de se lancer
si elles ne sont pas dans ce répertoire.
Directives
de configuration de débbugage.
debugger.host chaine de caractères
Adresse IP ou nom de l'hôte utilisé pour le déboggage.
debugger.port chaine de caractères
Numéro du port utilisé pour le déboggage.
debugger.enabled booléen
Directives qui activent ou désactivent l'option de déboggage.
Directives
de chargement des extensions
enable_dl booléen
Cette directive est réellement utile que dans le cas d'une compilation
comme module Apache. Vous pouvez activer le chargement dynamique des extensions
avec la fonction dl(),
et cela de maniére locale à chaque serveur virtuel ou à chaque répertoire.
La principale raison qui pousse à désactiver le chargement dynamique
est un problème de sécurité. Lorsque le chargement dynamique est activé, il est
possible d'ignorer les directives "safe_mode" ou
"open_basedir".
Par défaut, il est possible d'utiliser le chargement dynamique, sauf
lorsque la directive "safe_mode" est activée. En effet, il est alors
impossible d'utiliser la fonction dl().
extension_dir chaine de caractères
Définit le répertoire dans lequel le PHP doit chercher les extensions
lors du chargement dynamique.
extension chaine de caractères
Définit les extensions qui doivent être chargées lors du démarrage du
PHP.
Directives
de configuration MySQL
mysql.allow_persistent booléen
Active ou désactive les connexions persistentes à la base de données
MySQL.
mysql.max_persistent valeur numérique
Nombre maximum de connexions persistantes à une base de donnée MySQL
par processus.
mysql.max_links valeur numérique
Nombre de connexion maximum à une base de donnée MySQL par processus,
incluant les connexions persistantes.
Directives
de configuration mSQL
msql.allow_persistent booléen
Active ou désactive les connexions persistentes à la base de données
mSQL.
msql.max_persistent valeur numérique
Nombre maximum de connexions persistantes à une base de donnée mSQL par
processus.
msql.max_links valeur numérique
Nombre de connexions maximum à une base de donnée mSQL par processus,
incluant les connexions persistantes.
Directives
de configuration Postgres
pgsql.allow_persistent booléen
Active ou désactive les connexions persistentes à la base de données
Postgres.
pgsql.max_persistent valeur numérique
Nombre maximum de connexions persistantes à une base de donnée Postgres
par processus.
pgsql.max_links valeur numérique
Nombre de connexions maximum à une base de donnée Postgres par processus,
incluant les connexions persistantes.
Directives
de configuration Sybase
sybase.allow_persistent booléen
Active ou désactive les connexions persistentes à la base de données
Sybase.
sybase.max_persistent valeur numérique
Nombre maximum de connexions persistantes à une base de donnée Sybase
par processus.
sybase.max_links valeur numérique
Nombre de connexions maximum à une base de donnée Sybase par processus,
incluant les connexions persistantes.
Directives
de configuration Sybase-CT
sybct.allow_persistent booléen
Active ou désactive les connexions persistentes à la base de données
Sybase-CT. Par défaut, cette option est activée.
sybct.max_persistent valeur numérique
Nombre maximum de connexions persistantes à une base de donnée
Sybase-CT par processus. Par défaut, cette option est à -1, ce qui signifie
nombre de connexion illimité.
sybct.max_links valeur numérique
Nombre de connexions maximum à une base de donnée Sybase-CT par
processus, incluant les connexions persistantes. Par défaut, cette option est à
-1, ce qui signifie nombre de connexions illimitées.
sybct.min_server_severity valeur numérique
Les messages en provenance du serveur avec une "severity"
égale à sybct.min_server_severity seront considérés comme des warnings. Cette
valeur peut être modifiée à l'intérieur du script en appelant la fonction
sybase_min_server_severity(). Par défaut, cette valeur vaut 10.
sybct.min_client_severity valeur numérique
Les messages en provenance de la librairie client avec une
"severity" égale ou supérieur à sybct.min_client_severity seront
considérés comme des warnings. Cette valeur peut être modifiée à l'intérieur du
script en appelant la fonction sybase_min_client_severity(). Par dêtre modifié
à l'intérieur du script en appelant la fonction faut, cette valeur vaut 10, ce
qui annule tout reporting d'erreur.
sybct.login_timeout valeur numérique
Temps
maximum au terme duquel une tentative de connexion non aboutie renvoie une
erreur. Il est à noter que si max_execution_time est dépassé avant que la
connexion "timed out", votre script sera terminé avant le message
d'erreur. Par défaut, cette valeur vaut 1 minute.
sybct.timeout valeur numérique
Temps maximum en secondes avant qu'une tentative de requête
"select_db" ou "query" non aboutie renvoie une erreur. Il
est à noter que si max_execution_time est dépassé avant que la requête
"timed out", votre script sera terminé avant le message d'erreur. Par
défaut, il n'y a pas de limite.
sybct.hostname chaîne de caractères
Nom de l'hôte à partir duquel vous vous connectez, afin d'être affiché
par la fonction sp_who. Par défaut, cette valeur égale à 0.
Directives
de configuration Informix
ifx.allow_persistent booléen
Active les connexions persistantes à une basse de donnée Informix.
ifx.max_persistent valeur numérique
Nombre maximum de connexions persistantes à une basse de donnée
Informix, par processus.
ifx.max_links valeur numérique
Nombre maximum de connexions à une basse de donnée Informix par
processus, en incluant les connexions persistantes.
ifx.default_host chaîne de caractères
Hôte par défaut ou se connecter si auxun hôte n'est spécifié par les
directives ifx_connect()
ou ifx_pconnect().
ifx.default_userchaîne de caractères
User id par défaut à utiliser lorsque qu'aucun n'est spécifié par les
fonctions ifx_connect()
ou ifx_pconnect().
ifx.default_password chaîne de caractères
Mot de passe par défaut si aucun n'a été spécifié par la fonctions ifx_connect()
ou ifx_pconnect().
ifx.blobinfile booléen
Activer cette option si vous voulez que les colonnes de type "blob"
soit retournée dans un fichier, et désactivez là si vous voulez qu'elle soit
retournée en mémoire. Vous pouvez modifier dynamiquement cette valeur grâce à
la fonction ifx_blobinfile_mode().
ifx.textasvarchar booléen
Activer cette option si vous voulez qu'une colonne de type
"TEXT" soit renvoyée comme une chaîne de caractères normale, et
désactivez là si vous voulez utiliser le paramètre "blob id". Vous
pouvez modifier dynamiquement cette valeur gâce à la fonction ifx_textasvarchar().
ifx.byteasvarchar booléen
Activer cette option si vous voulez qu'une colonne de type
"BYTE" soit renvoyée comme une chaîne de caractères normale, et
désactivez là si vous voulez utilisez le paramètre "blob id". Vous
pouvez modifier dynamiquement cette valeur grâce à la fonction ifx_textasvarchar().
ifx.charasvarchar booléen
Acitvez cette option si vous voulez conserver les espaces en fin de
chaîne de caractères lorsque vous faites un fetch.
ifx.nullformat booléen
Activez cette option si vous voulez que les colonnes "NULL"
soit renvoyées comme une chaîne de caractères, désactivez là si vous voulez
qu'elle soit renvoyée comme une chaîne de caractères vide. Vous pouvez modifier
dynamiquement cette valeur en utilisant la fonction ifx_nullformat().
Directives
de configuration de précision mathématique.
bcmath.scale valeur numérique
Nombre de chiffres après la virgule pour toutes les fonctions de
précision mathématique.
Directives
de configuration du navigateur.
browscap chaîne de caractères
Nom du fichier de "browser capabilities".
Directives
de configuration du driver ODBC unifié
uodbc.default_db chaîne de caractères
"ODBC data source" à utiliser dans les fonctions odbc_connect()
ou odbc_pconnect()
si aucune n'est spécifiée.
uodbc.default_user chaîne de caractères
Nom d'utilisateur à utiliser dans les fonctions odbc_connect()
ou odbc_pconnect()
si aucun n'est spécifié.
uodbc.default_pw chaîne de caractères
Mot de passe à utiliser dans les fonctions odbc_connect()
ou odbc_pconnect()
si aucun n'est spécifié.
uodbc.allow_persistent booléen
Cette option permet d'activer ou de désactiver les connexions
persistantes à la base de données.
uodbc.max_persistent valeur numérique
Nombre de connexion persistante authorisée à la base de données.
uodbc.max_links valeur numérique
Nombre de connexions totales (persistantes ou non) par processus à la
base de données.
Chapitre
4 : Security
PHP est un langage puissant et l'interpréteur, qu'il soit
inclus dans le serveur web ou bien compilé en version CGI, est capable
d'accéder aux fichiers, d'exécuter des commandes et d'ouvrir des connexions
réseaux. Toutes ces propriétés rendent le serveur web non sécurisé. Le langage
PHP a été pensé afin d'être un langage beaucoup plus sécurisé pour écrire des
CGI que le Perl ou le langage C, de plus une sélection rigoureuse des options
de compilation et d'exécution vous permettront d'obtenir un équilibre parfaite
entre liberté et sécurité.
Etant donné qu'il y a de nombreux moyens d'utiliser le
langage PHP, il y a de nombreuses directives de configuration afin d'en
contrôler le comportement. Un grand nombre d'options permettent d'utiliser le
PHP dans de nombreuses situations, mais cela signifie aussi qu'il y a certaines
combinaisons d'options de compilation et d'exécution qui amènent le serveur a
être non sécurisé. Ce chapitre explique comme les différentes options de configurations
peuvent être combinées, tout en conservant une sécurité maximum.
Version
binaire CGI
Attaques possibles
L'option d'utiliser le PHP comme un binaire CGI vient la
plupart du temps du fait de ne pas vouloir l'utiliser comme un module du
serveur web, (comme Apache), ou bien que vous souhaitez l'utiliser en
combinaison d'un wrapper CGI afin de créer un environnement de script sécurisé
(en utilisant des techniques de chroot ou setuid). Une telle décision signifie
habituellement que vous installez votre exécutable dans le répertoire cgi-bin
de votre serveur web. CERT advisory CA-96.11
recommende effectivement de placer l'interpréteur à l'intérieur du répertoire
cgi-bin. Même si le binaire PHP peut être utilisé comme interpréteur
indépendant, PHP a été pensé afin de rendre impossible les attaques que ce type
d'installation induit.
·
Accès au système de fichier:
http://ma.machine/cgi-bin/php?/etc/passwd
La requête dans une url après le
point d'interrogation (?) est envoyée à l'interpréteur comme une ligne de
commande par l'interface CGI. Habituellement, l'interpréteur ouvre le fichier
spécifié et l'exécute.
Lorsqu'il est invoqué comme
binaire CGI, le PHP refuse d'interpréter les arguments de la ligne de commande.
·
Accès d'un document web sur le
serveur: http://ma.machine/cgi-bin/php/secret/doc.html
Le "path information"
dans l'url, situé juste après le nom du binaire PHP, /secret/doc.html est
utilisé par convention pour spécifier le nom du fichier qui doit être ouvert et
interprété par le programe CGI. Habituellement, des directives de configuration
du serveur web (pour le serveur Apache: Action) sont utilisées pour rediriger
les requêtes pour obtenir un document http://ma.machine/secret/script.php3 par
l'interpréteur PHP. Dans une telle configuration, le serveur web vérifie
d'abord si il a accès au répertoire /secret, et après cette vérification
redirige la requête vers http://ma.machine/cgi-bin/php/secret/script.php3.
Malheureusement, si la requète est faite directement sous cette forme, aucune
vérification d'accès n'est faite par le serveur web pour le fichier
/secret/script.php3, mais uniquement pour le fichier /cgi-bin/php. De cette
manière, n'importe quel utilisateur qui peut accéder au fichier /cgi-bin/php
peut aussi accéder au document protégés sur le serveur web.
Avec le PHP, l'option de
compilation --enable-force-cgi-redirect
et les options d'exécution doc_root
et user_dir
peuvent être utilisées pour prévenir ce genre d'attaques, si des restrictions
d'accès sont appliquées sur les documents du serveur. Voir ci-dessous pour des
explications plus complètes sur les différentes combinaisons.
Cas 1: Tous les fichiers sont publics
Si votre serveur n'a aucun document dont l'accès est
restreint par un mot de passe ou un système de vérification de l'adresse IP,
vous n'avez aucun besoin de ce type de configuration. Si votre serveur web ne
permet pas les redirections, ou si votre serveur web n'a aucun besoin de
communiquer avec le binaire PHP de manière sécurisée, vous pouvez utiliser
l'option de compilation --disable-force-cgi-redirect.
Vous devez quand même vérifier qu'aucun script ne fait appel au PHP, de manière
directe, http://ma.machine/cgi-bin/php/dir/script.php3 ou bien de manière
indirecte, par redirection, http://ma.machine/dir/script.php3.
Les redirections peuvent être configurées dans les fichiers
de configuration d'Apache en utilisant les directives "AddHandler" et
"Action" (voir ci-dessous).
Cas 2: Utilisation de la directive de compilation --enable-force-cgi-redirect
Cette option de compilation prévient quiconque d'appeler
directement un script avec l'url
http://ma.machine/cgi-bin/php/secretdir/script.php3. Dans ce cas là, PHP
parsera le fichier uniquement si il y a eu redirection.
Habituellement, le serveur web Apache réalise une
redirection grâce aux directives suivantes :
Action
php3-script /cgi-bin/php
AddHandler
php3-script .php3
Cette option a uniquement été testée avec Apache; et compte
sur Apache pour affecter la variable d'environnement non-standart
REDIRECT_STATUS pour les requêtes redirigées. Dans le cas où votre serveur web
ne supporte pas le renseignement du PHP, pour savoir si la requête a été
redirigée ou non, vous ne pouvez pas utiliser cette option de compilation. Vous
devez alors utiliser une des autres manières pour utiliser la version binaire
CGI du PHP, comme exposé ci-dessous.
Cas 3: Utilisation du "doc_root" ou du
"user_dir"
Ajouter un contenu interactif dans votre serveur web, comme
des scripts ou des exécutables, est souvent considéré comme une pratique
non-sécurisée. Si, par erreur, le script n'est pas exécuté mais affiché comme
une page HTML classique, il peut en résulter un vol de propriété intellectuelle
ou des problèmes de sécurité à propos des mots de passe notamment. Donc, la
plupart des administrateurs préfèrent mettre en place un répertoire spécial
pour les scripts qui est uniquement accessible par le biais du binaire CGI du
PHP, et donc, tous les fichiers de ce répertoire seront interprétés et non
affichés tels quel.
Aussi, si vous ne pouvez pas utiliser la méthode présentée
ci-dessus, il est nécessaire de mettre en place un répertoire
"doc_root" différent de votre répertoire "document root" de
votre serveur web.
Vous pouvez utiliser la directive doc_root
dans le fichier
de configuration, ou vous pouvez affecter la variable d'environnement
PHP_DOCUMENT_ROOT. Si cette variable d'environnement est affectée, le binaire
CGI du PHP construira toujours le nom de fichier à ouvrir avec doc_root et le "path
information" de la requête, et donc vous serez sûr qu'aucun script n'est
exécuté en dehors du répertoire prédéfinit. (à l'exception du répertoire
désigné par la directive user_dir
Voir ci-dessous).
Une autre option possible ici est la directive user_dir.
Lorsque la directive n'est pas activée, seulement les fichiers contenues dans
le répertoire doc_root peuvent être ouverts.
Ouvrir un fichier possédant l'url http://ma.machine/~user/doc.php3 ne
correspond pas à l'ouverture d'un fichier sous le répertoire racine de
l'utilisateur mais à l'ouverture du fichier ~user/doc.php3 sous le repertoire
"doc_root" (oui, un répertoire comment par un tilde [~]).
Si la directive "user_dir" est activée à la valeur
public_php par exemple, une requête du type http://ma.machine/~user/doc.php3
ouvrira un fichier appelé doc.php3 sous le répertoire appelé public_php sous le
répertoire racine de l'utilisateur. Si le répertoire racine des utilisateurs
est /home/user, le fichier exécuté sera /home/user/public_php/doc.php3.
user_dir et doc_root sont deux directives totalement
indépendantes et donc vous pouvez contrôler l'accès au répertoire "document
root" séparément des répertoires "user directory".
Cas 4: L'exécutable PHP à l'extérieur de l'arborescence du serveur
Une solution extrêmement sécurisée consiste à mettre
l'exécutable PHP à l'extérieur de l'arborescence du serveur web. Dans le
répertoire /usr/local/bin, par exemple. Le problème de cette méthode est que
vous aurez à rajouter la ligne suivante :
#!/usr/local/bin/php
dans
tous les fichiers contenant des tags PHP. Vous devrez aussi rendre le binaire
PHP exécutable. Dans ce cas-là, traitez le fichier exactement comme si vous
aviez un autre script écrit en Perl ou en sh ou en un autre langage de script
qui utilise #! comme mécanisme pour lancer l'interpréteur lui-même.
Pour que l'exécutable PHP prenne en compte les variables
d'environnement PATH_INFO et PATH_TRANSLATED correctement avec cette
configuration, vous devez utiliser l'option de compilation --enable-discard-path
.
Module
Apache
Lorsque le PHP est compilé en tant que module Apache, ce
module hérite des permissions accordées à l'utilisateur faisant tourner Apache
( par défaut, l'utilisateur "noboby").