FAQ du serveur HTTP ApacheConsultez toutes les FAQ

Nombre d'auteurs : 9, nombre de questions : 47, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireModulesPHP
  1. PHP, s'il se présente sous la forme d'un module compilé sous forme dynamique par rapport à Apache doit être chargé par ce dernier à son démarrage. Vous devez par conséquent disposer d'une ligne LoadModule et éventuellement AddModule pour les anciennes versions d'Apache (branches 1.2 à 1.3 incluses) :

     
    Sélectionnez
    
    # A la suite des autres directives LoadModule :
    LoadModule php5_module "libexec/apache13/libphp5.so"
     
    # Apache 1.2 à 1.3 uniquement, à la suite des autres :
    AddModule mod_php5.c
  2. Faire en sorte que les fichiers portant des extensions précises soient traités par l'interpréteur PHP. Pour cela, il faut les associer au type MIME prédéfini et prévu à cette fin : application/x-httpd-php, à l'aide de la directive AddType. Ce qui donne :

     
    Sélectionnez
    
    AddType application/x-httpd-php .php .php3 .inc
Créé le 17 décembre 2008  par julp

Lorsque PHP est compilé en tant que module Apache, vous avez à votre disposition deux directives pour modifier la configuration de PHP :

  • php_flag, réservée aux valeurs de type booléenne (On/Off)
  • php_value pour tous les autres types de valeur (entières, comme chaînes).

Tous les paramètres de configuration de PHP ne peuvent être modifiés par un fichier htaccess, seuls ceux possédant la valeur PHP_INI_PERDIR ou PHP_INI_ALL dans la documentation de PHP peuvent y être redéfinis.

De plus, les administrateurs doivent vous le permettre car cela n'est possible que si le répertoire ciblé possède la valeur Options (ou All) pour sa directive AllowOverride. Notez que vous ne pourrez pas outrepasser les valeurs définies dans le fichier de configuration d'Apache au moyen de php_admin_value et php_admin_flag.

Exemple :
Sélectionnez

php_value upload_max_filesize 4M
php_flag magic_quotes_gpc Off
Créé le 17 décembre 2008  par julp

Du fait que PHP n'est plus utilisé comme module, les directives php_flag et php_value ne seront pas reconnues (et conduiraient à une erreur 500). Il est cependant possible de retrouver cette possibilité mais cette charge reviendra à PHP lui-même et non plus au serveur. Il devient donc nécessaire, à cette fin, d'installer l'extension PECL nommée htscanner pour prendre le relais.

Installation :

  • Sur systèmes de type Unix : si vous avez employé les paquets mis à votre disposition par votre système pour installer PHP, il serait préférable de vérifier que cette extension n'y est pas proposée.

    Dans le cas contraire, il sera nécessaire de s'orienter vers une compilation de l'extension à partir des sources :

    • Pour une compilation dynamique de l'extension vis-à-vis de PHP, ne requérant ainsi pas la (re)compilation intégrale de PHP :

       
      Sélectionnez
      
      cd ~
      wget http://pecl.php.net/get/htscanner -O htscanner.tgz
      tar xzf htscanner.tgz
      cd htscanner-<version>
      phpize
      ./configure
      make
      make install

      Editer maintenant votre fichier php.ini de sorte à ajouter cette nouvelle extension à votre environnement :

       
      Sélectionnez
      
      extension=htscanner.so
    • Pour une compilation statique de cette extension, il sera nécessaire de recompiler PHP :

       
      Sélectionnez
      
      cd ~
      wget http://pecl.php.net/get/htscanner -O htscanner.tgz
      tar xzf htscanner.tgz -C <répertoire vers les sources de PHP>/ext/
      mv <répertoire vers les sources de PHP>/ext/htscanner-<version> <répertoire vers les sources de PHP>/ext/htscanner
      cd <répertoire vers les sources de PHP>
      ./buildconf --force
      ./configure --enable-htscanner <toutes vos autres options ici>
      make
      make install
  • Sur Windows : téléchargez l'archive intitulée PECL <version PHP> Win32 binaries depuis le site de PHP. Extrayez-en l'extension htscanner (fichier php_htscanner.dll) vers le répertoire de votre installation de PHP contenant les autres extensions (probablement ext). Chargez-la en éditant votre fichier php.ini de sorte à ajouter la ligne ci-dessous :

     
    Sélectionnez
    
    extension=php_htscanner.dll

Configuration et utilisation : l'extension htscanner peut se configurer sur quelques points depuis le fichier de configuration de PHP (php.ini) :

Nom du paramètre Valeur par défaut Description
htscanner.config_file .htaccess Nom du fichier de configuration recherché.
htscanner.default_docroot / Indique la racine web. La valeur est utilisée s'il n'est pas possible de la déterminer sur les informations fournies par le serveur.
htscanner.default_ttl 300 Durée de vie (en secondes) des paramètres lors de leur mise en cache.
htscanner.stop_on_error 0 Détermine si toute erreur doit être fatale (valeur 1) ou non (valeur 0).

Vous pouvez désormais de nouveau utiliser les directives php_flag et php_value à la différence près qu'il faut les placer dans un bloc <IfModule> afin qu'elles ne soient pas interprétées par Apache et qu'elles ne génèrent pas une erreur 500 du fait qu'elles ne sont pas traitées par lui-même. Démonstration :

 
Sélectionnez

<IfModule mod_php5.c>
    php_flag magic_quotes_gpc Off
</IfModule>

Si l'emploi des blocs <IfModule> représente un problème, vous pouvez créer un module Apache de façon à les intercepter sans les traiter ainsi elles ne seraient plus source d'une erreur 500. Suivant votre version d'Apache, la source à utiliser varie quelque peu :

  • Versions 1.X :

     
    CacherSélectionnez
  • Versions 2.X :

     
    CacherSélectionnez

Depuis la version 5.3.0, PHP offre nativement, en CGI, deux options supplémentaires :

  • Les fichiers .user.ini (nom par défaut qui peut être modifié par la directive php.ini : user_ini.filename) qui s'utilisent sur le même principe que les fichiers .htaccess afin de redéfinir localement certains paramètres PHP. Il n'est ainsi possible de modifier que ceux qui sont prévus pour l'être (définis par la constante PHP_INI_PERDIR et PHP_INI_USER - ce qui correspond, à quelques détails près, à ce qu'il est possible de faire avec un fichier .htaccess). L'implémentation est inspirée des fichiers .htaccess mais utilisent la syntaxe des fichiers ini : vous ne pouvez pas y placer autre chose que des paramètres PHP (ils seraient ignorés voir, plus grave, généreraient des erreurs).

    Le fonctionnement est tiré des fichiers .htaccess à savoir que PHP va chercher un fichier .user.ini dans le répertoire courant du script appelé. S'il n'en trouve pas, il va tenter de remonter jusqu'à la racine du site (DocumentRoot) jusqu'à en trouver un.

    Si l'activation de cette fonctionnalité est problématique (performances ou effets de bord dans un environnement mutualisé notamment), elle peut être désactivée en donnant une valeur vide à la directive PHP user_ini.filename.

    Les données de ces fichiers .user.ini sont mises en cache pour une durée de 300 secondes (5 minutes) par défaut. Cette valeur peut être augmentée ou réduite en jouant sur la directive user_ini.cache_ttl de votre fichier php.ini.

  • Deux types de section spéciale ont été prévus au fichier php.ini système : [HOST=domaine] et [PATH=chemin]. Elles permettent respectivement d'assigner, depuis le fichier php.ini système, des paramètres propres à un site ou à un répertoire.

    Exemples :

    • Définir un include_path propre au site sousdomaine.domaine.fr :

       
      Sélectionnez
      
      ; global - inclusion à partir du répertoire courant uniquement
      include_path = "."
       
      [HOST=sousdomaine.domaine.fr]
      include_path = ".:/usr/lib/php/PEAR/"
    • Appliquer un open_basedir aux scripts du répertoire C:/AMP/www/soussite1/ (sa propre arborescence est également affectée) :

       
      Sélectionnez
      
      ; global - aucune restriction
      open_basedir = 
       
      [PATH=C:/AMP/www/soussite1/]
      open_basedir = "C:/AMP/www/soussite1/"

suPHP dipose d'une directive, suPHP_ConfigPath, qui vous permet, dans un fichier .htaccess, à condition que l'administrateur l'autorise (AllowOverride de valeur minimale Options), d'indiquer l'emplacement d'un fichier php.ini alternatif global à employer pour l'utilisation des scripts.

Mis à jour le 16 avril 2010  par julp
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2010 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.