php

Ce module ajoute la possibilité d'exécuter des scripts PHP dans votre serveur Web via le module apache. Il permet également de déployer un dépôt PEAR.

Packages debian nécessaires : libapache2-mod-fcgid, php5-cgi, php5-cli

Packages debian facultatifs : php5-dev

Module pkgi nécessaires : Aucun

Modules pkgi optionnels : apache

Variables spécifiques pkgi :

  • APPNAME_PHP_XDEBUG_REMOTE_PORT : le port d'écoute de la machine où est installé le debugguer xdebug
  • APPNAME_PHP_XDEBUG_REMOTE_HOST : le nom réseau de la machine où est installé le debugguer xdebug

Structure du module :

  • bin/pkgi-install-pear : script permettant de déployer simplement un dépôt PEAR (en faisant appel à go-pear), et des extensions PECL.
  • bin/pkgi-install-pear-phar : script permettant de déployer simplement un dépôt PEAR/PECL en faisant appel à la version phar dego-pear (cette commande est disponible depuis la version 3.15 de pkgi).
  • etc/php5/conf.d/ : les fichiers php.ini modularisés. Ici l'utilisateur peut surcharger les variables par défaut de PHP en rajoutant son ou ses fichiers surchargeant la configuration de PHP par défaut.
  • etc/php5/php.ini : le fameux php.ini (configuration de php) qui est la concaténation des fichiers trouvés dans etc/php5/conf.d/
  • etc/apache2/conf.d/php : la config pour charger le module php à la sauce "apache FastCGI"
  • usr/share/php/XXXX : c'est l'emplacement préconisé pour placer vos librairies PHP (remplacez XXX par le nom de votre librairie).
  • usr/bin/php : PHP en ligne de commande basé sur le php.ini locale de votre application
  • var/lib/apache2/fcgid : Répertoire de stockage interne à fcgid (ne pas toucher)
  • usr/lib/fcgi-bin/php-fcgi-wrapper : Lien symbolique vers le binaire php5-cgi de la machine
  • var/www/ : le répertoire correspondant à l'URL racine de votre serveur apache (DocumentRoot), placez y ici vos scripts PHP que vous souhaitez exécuter dans le serveur apache.

Spécificités du FastCGI

Depuis pkgi 2.13 le module apache FastCGI est utilisé pour exécuter les scripts à travers le serveur apache.

Dans les versions de pkgi antérieurs à la version 2.13, PHP fonctionnait exclusivement avec apache en mode prefork. Ce type de fonctionnement à deux inconvénients principaux :

  1. Le nombre de connexions simultanée est rapidement limité par la directive MaxClients
  2. Le multi processus consomme beaucoup plus de mémoire qu'il n'y en a vraiment besoin.

Pour éviter ces 2 problèmes, la solution consiste à utiliser apache en mode worker.

FastCGI est lui capable de fonctionner indifféremment avec apache en mode prefork ou worker. Un autre avantage de FatsCGI est sa rapidité : plus rapide ou au moins aussi rapide que prefork suivant les cas.

Références :

Installation d'un dépôt PEAR

La première étape est d'installer les packages PEAR "de base", pour cela il suffit de lancer la commande suivante :

bin/pkgi-install-pear

Plusieurs fichiers seront téléchargés et installés dont :

  • usr/bin/pear : le binaire de pear, c'est celui la que vous devrez utiliser par la suite pour installer des packages (si vous chargez etc/profile dans votre environnement, ce chemin sera automatiquement réglé dans votre console)
  • usr/share/php/pear/ : c'est ici que seront placées toutes les sources PHP des différents packages que vous installerez. Ce chemin sera configuré automatiquement dans la variable include_path du php.ini de l'application.
  • usr/share/php/xxx/ : vous pouvez placer d'autre librairies dans des répertoires au même niveau que pear (ex: xxx). Tous ces éventuels répertoires seront alors automatiquement configurés dans la variable include_path du php.ini de l'application. (depuis pkgi 2.11)
  • usr/etc/pear.conf : c'est ici que seront stockées les variables de configurations de PEAR (l'emplacement est étrange mais c'est ce que Debian utilise par défaut)

Pour installer un package, il ne vous reste plus qu'à utiliser la commande usr/bin/pear (ou tout simplement pear si vous avez chargé etc/profile dans votre environnement). Par exemple pour installer le package Pxxo, procédez comme cela :

usr/bin/pear install pxxo/Pxxo

Installation d'extensions PECL

Les prérequis sont :

  • Une version de pkgi supérieure ou égale à 2.20
  • Le paquet debian php5-dev (utilisé pour la compilation des extensions)
  • L'installation des paquets PEAR de base. Pour cela, il suffit de lancer la commande suivante :
    bin/pkgi-install-pear

Ensuite, vous pouvez utiliser la commande usr/bin/pecl pour compiler vos extensions. Voila des exemples :

usr/bin/pecl install xdebug
usr/bin/pecl install apc
usr/bin/pecl install oci8

Remarques :

  • Certaines extensions nécessitent des paquets debian "devel" système, pensez à les installer si vous rencontrez des erreurs de compilation.
  • Si vous essayez d'installer des extensions déjà présentes au niveau système, vous devez préalablement supprimer le lien symbolique correspondant dans usr/lib/php5/extensions/

Comment corriger les URLs venant d'un reverse proxy ?

Il suffit de mettre le bout de code PHP suivant en tête de tous vos scripts :

<?php
 
// bout de code à activer si vous êtes avec une URL https publique
// $_SERVER['HTTPS'] = 'on';
 
// ce code permet de rendre "transparent" le reverse proxy
if (isset($_SERVER['REMOTE_ADDR'])) {
    $_SERVER['REMOTE_ADDR'] = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
}
if (isset($_SERVER['HTTP_HOST'])) {
    $_SERVER['HTTP_HOST']   = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST'];
}
if (isset($_SERVER['SERVER_ADDR'])) {
    $_SERVER['SERVER_ADDR'] = isset($_SERVER['HTTP_X_FORWARDED_SERVER']) ? $_SERVER['HTTP_X_FORWARDED_SERVER'] : $_SERVER['SERVER_ADDR'];
}
if (isset($_SERVER['SERVER_PORT'])) {
    $_SERVER['SERVER_PORT'] = isset($_SERVER['HTTP_X_FORWARDED_SERVER']) ? (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 443 : 80) : $_SERVER['SERVER_PORT'];
    if ($_SERVER['SERVER_PORT'] == 443) {
        $_SERVER['HTTPS'] = 'on';
    }
}

Version templatisée (à privilégier) :

<?php echo '<?php'; ?>
 
<?php if (preg_match('/^https/', getenv('APPNAME_APACHE_URL_ROOT'))) { ?>
$_SERVER['HTTPS'] = 'on';
<?php } ?>
 
// ce code permet de rendre "transparent" le reverse proxy
if (isset($_SERVER['REMOTE_ADDR'])) {
    $_SERVER['REMOTE_ADDR'] = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
}
if (isset($_SERVER['HTTP_HOST'])) {
    $_SERVER['HTTP_HOST']   = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST'];
}
if (isset($_SERVER['SERVER_ADDR'])) {
    $_SERVER['SERVER_ADDR'] = isset($_SERVER['HTTP_X_FORWARDED_SERVER']) ? $_SERVER['HTTP_X_FORWARDED_SERVER'] : $_SERVER['SERVER_ADDR'];
}
if (isset($_SERVER['SERVER_PORT'])) {
    $_SERVER['SERVER_PORT'] = isset($_SERVER['HTTP_X_FORWARDED_SERVER']) ? (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ? 443 : 80) : $_SERVER['SERVER_PORT'];
    if ($_SERVER['SERVER_PORT'] == 443) {
        $_SERVER['HTTPS'] = 'on';
    }
}

Il suffit donc de copier/coller la version "templatisée" de ce code dans le fichier suivant de votre module pkgi :

pkgi/votremodule/etc/php5/prepend.d/reverse-proxy.php

Il sera alors automatiquement inclus avant d'exécuter les scripts PHP de votre application.

Comment installer et activer APC ?

On commence par compiler le module :

rm -f usr/lib/php5/extensions/apc.so
./bin/pkgi-install-pear
./usr/bin/pecl install apc

Ensuite on crée la configuration pour le php.ini dans le fichier pkgi/monmodule/etc/php5/conf.d/020apc.ini :

[apc]
extension   = apc.so
apc.enabled = On

On relance deux fois (à cause d'un bug pkgi connu) le build et on redémarre le serveur apache :

./pkgi/build
./pkgi/build
./etc/init.d/apache2 restart
 
modules/php.txt · Dernière modification: 2012/05/01 23:00 par kerphi
Recent changes RSS feed Powered by PHP Hosted on Debian Driven by DokuWiki Deployed by Pkgi