Compilation de PHP 5.2.17 en GGI/FastCGI avec SuPHP

PHP (sigle de PHP: Hypertext Preprocessor3) est un langage de scripts libre principalement utilisé pour produire des pages Web dynamiques via un serveur HTTP, mais pouvant également fonctionner comme n'importe quel langage interprété de façon locale, en exécutant les programmes en ligne de commande. PHP est un langage impératif disposant depuis la version 5 de fonctionnalités de modèle objet complètes5. En raison de la richesse de sa bibliothèque, on désigne parfois PHP comme une plate-forme plus qu'un simple langage.

Installation de PHP 5.2.17 depuis les sources

Depuis les sources

  • Récupération de l'archive sur le site officiel :
cd /root/sources
wget http://fr2.php.net/get/php-5.2.17.tar.gz/fromfr.php.net/mirror
mv mirror php-5.2.17.tgz
tar xvzf php-5.2.17.tgz
cd php-5.2.17
  • Comme toute install depuis les sources, il y a les README :

Compilation de PHP

On constate aussi qu'un certain nombre d'extensions “couramment utilisées” sont déja dispo dans le Directory ext.

Compilation du moteur PHP en CGI/FCGI

  • Pour les extensions de PHP, on peut soit les compiler “en dur” avec le moteur soit on pourra les compiler séparement pour les chargés sous forme de librairies dynamiques (.so)

Installation des librairies de développement et paquets nécessaires pour la compil

aptitude install zip locate build-essential libxml2 libxml2-dev openssl libssl-dev libcurl4-gnutls-dev
  libjpeg62 libjpeg62-dev  libpng12-0 libpng12-dev libfreetype6 libfreetype6-dev libgmp3-dev libgmp3c2 
  libgmpxx4ldbl libmcrypt4 libmcrypt-dev libmhash2 libmhash-dev libmysqlclient15-dev libxslt1-dev 
  libc-client2007b-dev gettext
  


  • Voici les options que j'inclus directement dans le moteur PHP:
'./configure' \
'--prefix=/usr/local/php-5.2.17' \
'--disable-cli' \
'--enable-cgi' \
'--enable-fastcgi' \
'--with-mysql' \
'--with-mysqli' \
'--enable-bcmath' \
'--with-zlib-dir=/usr/include/' \
'--enable-simplexml' \
'--with-xsl' \
'--with-gd' \
'--with-openssl' \
'--enable-magic-quotes' \
'--enable-exif' \
'--enable-ftp' \
'--enable-sockets' \
'--enable-shmop' \
'--enable-mbstring' \
'--enable-sysvsem' \
'--enable-sysvshm' \
'--enable-calendar' \
'--with-png-dir=/usr' \
'--with-iconv' \
'--with-jpeg-dir=/usr' \
'--with-freetype-dir=/usr' \
'--with-pdo-mysql' \
'--with-mcrypt' \
'--enable-shmop' \
'--with-gmp' \
'--with-curl' \
'--with-mhash' \
'--enable-soap' \
'--with-imap' \
'--with-imap-ssl' \
'--with-kerberos' \
'--enable-dba' \
'--enable-zip' \
'--with-gettext' 


  • Le résultat génère le Makefile ne retourne pas d'erreurs donc un screen de ce type :

Compilation sans erreurs

Création du binaire de notre moteur PHP 5.2.17

Compilaton

make

ça prend du temps, ne soyez pas étonné :

real    3m49.165s
user    2m41.554s
sys     0m26.350s

Installation du moteur

make install

Installation du binaire PHP

Le moteur moteur PHP 5.2.17 en CGI est disponible et fonctionnel :

PHP 5.2.17 installé

  • La fonction phpinfo() :

PHP-5.2.17 phpinfo();


Chargement d'extension dynamique dans PHP

Après compilation du binaire de PHP qui intègre “en dur” les extensions définies, on va ajouter des extensions dynamiquement.

Ajout de l'extension X-DEBUG

Xdebug PHP extension

Pour nos confrères les devellopeurs : The Xdebug extension helps you debugging your script by providing a lot of valuable debug information.

  • Installation de Xdebug :
cd /usr/local/php-5.2.17/
mkdir extensions
cd extensions
wget http://www.xdebug.org/files/xdebug-2.1.1.tgz .
tar xvzf xdebug-2.1.1.tgz
cd xdebug-2.1.1
cat README
/usr/local/php-5.2.17/bin/phpize
./configure --enable-xdebug --with-php-config=/usr/local/php-5.2.17/bin/php-config
make

La compilation nous retourne le PATH de la librairie exécutable :

Extension Xdebug compilée

  • Copier la librairie compilée (.so) dans le répertoire que vous définirez pour les extensions à loader :
mkdir /usr/local/php-5.2.17/bin/ext
cp /usr/local/php-5.2.17/extensions/xdebug-2.1.1/modules/xdebug.so /usr/local/php-5.2.17/bin/ext
  • Activer l'extension dans le php.ini :
vi /etc/php5/apache2/security/php.ini
zend_extension= /usr/local/php-5.2.17/bin/ext/xdebug.so

L'extension est fonctionnelle :

Xdebug

Configuration de plusieurs versions PHP avec suPHP par vhost

Contexte :

Vous disposez d'un LAMP avec par exemple un PHP (5.2.X), et vous souhaitez disposez des 2 versions de PHP sans pour autant relacher votre sécurité avec Apache2 et suPHP.


Logos

Ressources :

Installation de suPHP

aptitude install libapache2-mod-suphp

Déclaration de différents Handlers pour gérer plusieurs moteurs PHP

  • Modifier le /etc/suphp/suphp.conf
[handlers]
;Handler for php-scripts
application/x-httpd-php526=php:/usr/bin/php-cgi
application/x-httpd-php536=php:/usr/local/php-5.3.6/bin/php-cgi
application/x-httpd-php5217=php:/usr/local/php-5.2.17/bin/php-cgi

Pour cet exemple, j'ai 3 moteurs PHP : 5.2.6 (paquet Debian)/ 5.3.6 (compilé) et 5.2.17 (compilé).

  • Déclarer ces Handlers dans le fichier /etc/apache2/mods-enabled/suphp.conf :
<IfModule mod_suphp.c>
        # Handler du PHP-CGI en 5.3.6
        AddType application/x-httpd-php536 .php .php3 .php4 .php5 .phtml
        suPHP_AddHandler application/x-httpd-php536
        # Handler du PHP-CGI en 5.2.17
        AddType application/x-httpd-php5217 .php .php3 .php4 .php5 .phtml
        suPHP_AddHandler application/x-httpd-php5217
        # Handler du PHP-CGI en 5.2.6
        AddType application/x-httpd-php526 .php .php3 .php4 .php5 .phtml
        suPHP_AddHandler application/x-httpd-php526
.....

Cette méthode permet de pouvoir surcharger la conf de suphp dans les vhosts des instances d'Apache !!

Vous pouvez vous permettre maintenant d’appeler différentes versions de PHP toujours en bénéficiant de la sécurité de suPHP (contrôle owner/group/DocumentRoot…) en appelant le handler de votre choix dans le VHOST :

AddType application/x-httpd-php5217 .php .php3 .php4 .php5 .phtml

Si toutefois, vous ne précisez pas cette spécification, suPHP prendra le dernier lu dans le fichier /etc/apache2/mods-enabled/suphp/suphp.conf .

tutoriels/php.txt · Dernière modification: 13/11/2011 à 16:38 (modification externe)


Recent changes RSS feed Licence CC BY-SA 2.0 Powered by JQuery Powered by PHP Driven by DokuWiki
Aller bas de page
Retour haut de page