1. Page d'accueil
  2. Tutoriaux

Suphp : php4 et php5 avec apache 2 sous debian

Suphp : php4 et php5 avec apache 2 sous debian

Le 12-01-2006 à 16:27 par Nicolas L.. Dans PHP et Tutoriaux

Nombre de commentaires : 23

Je vais présenter une façon qui permet d’exécuter des script php4 et php5 sur le même serveur. Pour celà j’utilise un module apache qui permet d’exécuter des scripts php sous l’utilisateur du propriétaire des fichiers php. Je ne rapellerais pas ici les avantages de suphp. Seulement cette méthode fonctionne seulement avec suphp 0.6. J’avais à l’époque écrit un patch pour suphp0.5 mais depuis suphp0.6 est sortit et il permet directement de switcher facilement entre php4 et php5. Suphp0.6 fonctionne également avec les scripts perl mais je n’en parlerais pas dans ce tutorial.

Installation

Je suppose ici que vous avez déjà installé apache2, php4 en version CGI.

php5

Php5 est entrain d’être ajouté petit à petit dans debian testing et unstable. J’ai donc utilisé les paquets debian non officiels.
Selon votre distribution, rajouter les lignes suivantes qui vont bien dans votre fichier /etc/apt/sources.list :

# PHP5.0 for Debian sid
deb http://people.debian.org/~dexter php5.0 sid
deb-src http://people.debian.org/~dexter php5.0 sid

# PHP5.0 for Debian sarge
deb http://people.debian.org/~dexter php5.0 sarge
deb-src http://people.debian.org/~dexter php5.0 sarge

# PHP5.0 for Debian woody
deb http://people.debian.org/~dexter php5.0 woody
deb-src http://people.debian.org/~dexter php5.0 woody
deb http://www.backports.org/debian stable curl libtool libxml2 libxslt po-debconf sed
deb http://people.debian.org/~dexter libmcrypt woody
deb http://people.debian.org/~dexter mhash woody
 
# PHP5.0 for Ubuntu breezy
deb http://people.debian.org/~dexter php5.0 breezy
deb-src http://people.debian.org/~dexter php5.0 breezy

# PHP5.0 for Ubuntu hoary
deb http://people.debian.org/~dexter php5.0 hoary
deb-src http://people.debian.org/~dexter php5.0 hoary

D’autres dépots contenant php4 et php5 existent :

Ensuite, installer php5 :

apt-get install php5 php5-cli php5-cgi php5-dba php5-spl php5-mysql php5-pgsql php5-simplexml php5-sqlite php5-bz2 php5-gd

Suphp 0.6

Suphp 0.6 est désormais inclus dans debian testing et unstable. Un simple apt-get suffit :

apt-get install libapache2-mod-suphp suphp-common

Pensez à vérifier que vous disposez bien de suphp0.6 car la méthode proposée dans cette page ne fonctionnera pas avec les versions antérieures de suphp !

Configuration

Apache

Editer le fichier /etc/apache2/apache2.conf.
Rajouter la ligne suivante :

AddType application/x-httpd-php5 .php5

Il faut ensuite éditer le fichier /etc/apache2/mods-enabled/suphp.conf :

<IfModule mod_suphp.c>
	AddHandler x-httpd-php .php .php3 .php4 .phtml
        AddHandler x-httpd-php5 .php5
        AddHandler x-suphp-cgi .cgi .pl

	suPHP_AddHandler x-httpd-php
        suPHP_AddHandler x-httpd-php5
        suPHP_AddHandler x-suphp-cgi

	suPHP_Engine on
</IfModule>

Suphp

Editer le fichier /etc/suphp/suphp.conf. Le plus important est de configurer correctement la section [handlers].

[global]
;Path to logfile
logfile=/var/log/suphp/suphp.log

;Loglevel
loglevel=warn

;User Apache is running as
webserver_user=www-data

;Path all scripts have to be in
docroot=/var/www

; Security options
allow_file_group_writeable=true
allow_file_others_writeable=false
allow_directory_group_writeable=false
allow_directory_others_writeable=false

;Check wheter script is within DOCUMENT_ROOT
check_vhost_docroot=true

;Send minor error messages to browser
errors_to_browser=false

;PATH environment variable
env_path=/bin:/usr/bin

;Umask to set, specify in octal notation
umask=0077

; Minimum UID
min_uid=100

; Minimum GID
min_gid=100


[handlers]
;Handler for php-scripts
x-httpd-php=php:/usr/bin/php4-cgi
x-httpd-php5=php:/usr/bin/php5-cgi

;Handler for CGI-scripts
x-suphp-cgi=execute:!self

La section [handlers] est particulièrement importante car elle précise les chemins vers les exécutables PHP. Prenez donc soin de vous assurer que l’executable existe. Par exemple si votre exécutable php a le nom php5.0-cgi, adaptez la configuration en conséquence.

Avec cette configuration, tous les fichiers .php sont exécutés avec php4 et les fichiers .php5 sont exécutés avec php5.

On peut aussi choisir d’exécuter des fichiers .php avec php5 en utilisant un fichier .htaccess comme celui ci :

AddHandler x-httpd-php5 .php
AddType application/x-httpd-php5 .php

Je vous invite très fortement à consulter la documentation de suphp : /usr/share/doc/suphp-common/CONFIG

Résolution des problèmes

Problèmes généraux quand rien ne marche

Rien ne marche et je tombe systématiquement sur la page Internal Server Error et je ne sais pas quoi faire, suivez les pistes :

  • Consulter le fichier de log de suphp : /var/log/suphp/suphp.log.
  • Dans le fichier de configuration de suphp mettre temporairement à true la variable de conf errors_to_browser (relancer apache pr que ça soit prit en compte ?) : ainsi les erreurs seront directement affichées dans le navigateur plutot que de tomber sur la page "Internal Server Error".
  • Vérifier les droits sur vos dossiers : le groupe et les autres ne doivent pas avoir de droits en écriture, y comprit le docroot (/var/www par défaut).
  • Vérifier les droits sur les fichiers PHP : les autres ne doivent pas de droits en écriture.

Toutes ces restrictions sur les droits peuvent être changées dans le fichier de configuration de suphp à la section  ; Security options mais il est toujours conseillé d’attribuer des droits minimaux. Je préconise d’appliquer massivement du chmod 744 :).

Sortir du docroot

Dans le fichier de configuration de suphp, on peut dire de ne pas vérifier que les scripts exécutés se situent dans le docroot : check_vhost_docroot=true. Cependant, même en la passant à false, il est impossible de sortir du docroot, bug ou mauvaise cocnfiguration ? Quoi qu’il en soit, la documentation de suphp indique qu’il faut configurer la varaible docroot du fichier de configuration de suphp comme ceci : docroot=/

Jean-Christophe Montigny 

Bonjour,

merci beaucoup pour le tutoriel ! ca m'a bien avancé.
Par contre, je ne sais pas si je suis le seul dans ce cas, mais au niveau de la conf du module suphp pour apache, j'ai du mettre les lignes suivantes :

<Location />
SuPHP_AddHandler x-httpd-php
suPHP_AddHandler x-httpd-php5
</Location>

En effet, sans la directive <Location>, aucun de mes scripts php n'étaient exécutés. Peut-être est-ce spécifique a la version 0.6.1 de suphp.

iboga 

Merci pour ce petit mémo bien pratique.
Note aux lecteurs qui pourraient se le demander: la manip fonctionne aussi sur apache 1.3*

Yves Goergen http://unclassified.de

Bonsoir,
merci aussi de moi. J'avait des problèmes avec suPHP 0.6.1 et la directive suPHP_AddHandler. Ca ne marche pas sans une section <Location>, mais il va me server le fichier PHP ne pas interpreté. Avec <Location> ca marche très bien.
(Sorry for any mistakes in my French, I don't use it very often.)

Samouel 

je vous remercie infiniment pour ce tuto, un seul mot 'bravo'.
2 questions s'il vous plait:
1. Je ne trouve pas le fichier de conf de suphp (vous dites /etc/suphp/suphp.conf) baa je l'ai pas à cet emplacement ni à /etc/php4/* ni à /etc/php5/* et apt-cache search suphp.ini ne donne rien!
2. Dans le conf de /etc/apache2/mods-enabled/suphp.conf vous mettez la directive
"AddHandler x-suphp-cgi .cgi .pl" est-ce que suphp est valable aussi pour pl? si non ya pas un module pour Perl, Python pour executer les scripts avec l'identité client et non serveur (comme suphp quoi).
merci encore

Nico http://nico.tuxfamily.org

Bonjour Samouel.
je vais essayer de t'apporter deux réponses :
1- a tu bien installé la version 0.6 de suphp ? as tu bien installé les deux paquets "libapache2-mod-suphp" et "suphp-common" ?
2- oui, suphp est aussi valable pour les scripts cgi, mais je n'ai jamais eu l'occasion de le tester

à bientot

ps2gamer 

J'ai le même problème que toi Samouel :(

Je suis sous debian sarge r2, apache2, un PHP Version 5.1.4-1.dotdeb.1 ...
J'ai pu sans problème installer le suPHP 0.6.1, mais impossible d'avoir /etc/suphp/suphp.conf grrrrrrrr
Je comprend pas pourquoi il ne me l'installe pas, à moins que ce n’est pas la bonne version qui faut ?
Et autre chose que je n'est pas pue installer, c'est le paquet "php5-spl", il ne le trouve pas. :(

@+

Nico http://nico.tuxfamily.org

Bonjour ps2gamer, je vais te poser la même question qu'à Samouel : as tu bien installé les deux paquets "libapache2-mod-suphp" et "suphp-common" ? Ces deux paquets suffisent à avoir le fichier /etc/suphp/suphp.conf
Peut être a tu installé un suphp sauce dotdeb ? je ne connais pas tous leurs packages, donc peut être qu'ils ont packagé suphp et que le fichier de conf de suphp n'est pas placé au même endroit. Lance un petit find sur suphp.conf dans le dossier /etc

Nico

JF http://www.celiane.fr

Dans le fichier : /etc/apache2/apache2.conf

ServerTokens Prod
ServerSignature Off
Options -Indexes

# ServerTokens : masque les version de produits dans les headers affiche simplement Apache
# ServerSignature : masque les version de produits dans les pages générées par Apache
# Options -Indexes : empèche la génération automatique des index de répertoires (listing pâr Apache des fichier d'un répertoire lorsque index n'est pas présent)

Mika 

Bonjour,

Tuto très intéressant. Merci.

J'utilise actuellement les repositories de dotdeb... Mais impossible de trouver les paquets debian suivants : php5-dba, php5-spl, php5-simplexml, php5-sqlite, php5-bz2. De plus, lors de l'installation de tout cela, le paquet libapache-mod-php4 est enlevé car le paquet libapache-mod-php5 désire s'installé... :(

====
root@dmz# apt-get install php5 php5-cli php5-cgi php5-mysql php5-pgsql php5-gd
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Les paquets supplémentaires suivants seront installés :
libapache-mod-php5
Paquets suggérés :
php5-pear
Les paquets suivants seront ENLEVÉS :
libapache-mod-php4
Les NOUVEAUX paquets suivants seront installés :
libapache-mod-php5 php5 php5-cgi php5-cli php5-gd php5-mysql php5-pgsql
0 mis à jour, 7 nouvellement installés, 1 à enlever et 5 non mis à jour.
Il est nécessaire de prendre 10,5Mo dans les archives.
Après dépaquetage, 20,1Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] n
Annulation.
====

J'ai testé avec les repositories de dexter, idem...

Je suis sur une debian Sarge, avec Apache2 et actuellement php4 (PHP Version 4.4.2-0.dotdeb.1).

Mika 

Encore moi :)

Comment faites-vous pour installer suphp 0.6 sur Debian Sarge ? Moi j'ai la version 0.5 dans la liste des paquets... Cette version de suphp n'est pas dans les backports...

Merci d'avance,

Nico http://nico.tuxfamily.org

@Mika > Pour le backport je ne sais pas du tout, je pense que ça doit être très dur à faire soi même. Quoiqu'il en soit, si tu essaye d'utiliser la technique que je propose avec suphp 0.5, ça ne fonctionnera pas !!

Concernant le libapache-mod-php4 ce n'est pas grave, et même normal car ma technique utilise les versions cgi de php.

Bon courage pour le backport !
Nico

PtitKev http://www.statsbot.org

Hello :)

Bon je me lance pour la 2 eme fois sur ce tuto et je bloque sur ce msg d'erreur:

Starting web server: Apache2Syntax error on line 420 of /etc/apache2/apache2.conf:
Invalid command 'SuPHP_AddHandler', perhaps mis-spelled or defined by a module not included in the server configuration

J'ai chercher sur google mais rien d'intéressant.

En esperant que qqun a une soluce ^^

JPV 

Bonjour,
Je suis admiratif de ce travail, mais je n'y comprend rien. Mon serveur est sous debian. Je ne suis pas celui qui l'a installé (un étudiant). Aujourd'hui j'ai quelques soucis que je cherche à le résoudre, en vain.

Le forum debian ne fonctionne plus....
I am lost et porté disparu.
Votre contact (me contacter en colonne droite) ne fonctionne pas sous internet explorer (excusez c'est peut-être une injure), mais j'ai netscape et mozilla.
J'attends votre aide puisque vous êtes le seul lien avec le site debian-fr.org.

Merci encore.
JPV

lionelh 

PtitKev,

Tu as essayé avec un 's' minuscule au début car cle problème vient peut-êtr de là ?

lionelh

liquide http://www.lisx.org

ouép ca marche :p

Tom 

Bonjour j'ai un problème avec suPHP sur mon serveur

je l'ai installé et du coup ca me bloque certains includes, je m'explique.
Depuis un site /home/site1/www/, j'ai un fichier index.php qui fait un include("/home/site2/www/inc.php");
Mais j'ai un message d'erreur "Permission denied" sur le fichier alors que je l'ai mis en 777 pour être sur que le problème ne vient pas des droits.
J'en ai conclut que suPHP bloqué mon include car ce n'est pas le même utilisateur qui est maitre du fichier mais comment faire pour ne plus avoir ce problème ?

merci

vanalex 

Hello,
Merci pour toute cette documentation, qui m'a bien été utile. Mais il me j'ai tout de même un problème. Voici ma configue serveur :
- Ubuntu Edgy (6.10), Apache2 et Suphp 0.6.1.
J'ai installé Suphp via apt-get puis j'ai suivi les instructions de ce site.
Mon probleme est le suivant :
1°/ Apres avoir activé Suphp pour apache2, j'execute un script phpinfo.php. PHP fonctionne bien. le script m'indique que mon php.ini se trouve dans /etc/php5/cgi, si je modifie le fichier php.ini qui est dans ce répertoire et qu je relance apache les modifications ne sont pas prises en compte. Est ce normal? Voyez vous un problème?

2°/ Dans mon fichier /etc/apache2/mods-enabled/suphp.conf, j'ai ajouté la ligne suivante afin de personnaliser la configue php d'un site :
suPHP_ConfigPath /home/websafe/public_html/php.ini
Après avoir relancé apache, j'execute un script phpinfo.php qui se trouve dans le répertoire public_html. Malheureusement il semble que ce soit toujours la configue par défaut qui soit activée. Avez vous une idée?

Merci,

A++

XaF http://www.sbird.info/

J'ai tenté aussi, même erreur que PtitKev, et je n'ai aucun fichier suphp.conf contenant ce que vous citez ...

dommage :(

Vanalex 

Hello,

J'ai installé Suphp via apt-get.
- Ubuntu Edgy (6.10), Apache2 et Suphp 0.6.1.

Mon probleme est le suivant :
1°/ Apres avoir activé Suphp pour apache2, j'execute un script phpinfo.php. PHP fonctionne bien. le script m'indique que mon php.ini se trouve dans /etc/php5/cgi, si je modifie le fichier php.ini qui est dans ce répertoire et qu je relance apache les modifications ne sont pas prises en compte. Est ce normal? Voyez vous un problème?

2°/ Dans mon fichier /etc/apache2/mods-enabled/suphp.conf, j'ai ajouté la ligne suivante afin de personnaliser la configue php d'un site :
suPHP_ConfigPath /home/websafe/public_html/php.ini
Après avoir relancé apache, j'execute un script phpinfo.php qui se trouve dans le répertoire public_html. Malheureusement il semble que ce soit toujours la configue par défaut qui soit activée. Avez vous une idée?

fred 

hello, bon tuto
mais je ne peut plus acceder a phpmyadmin !

[warn] Script "/home/xxx/www/symlink" resolving to "/usr/share/phpmyadmin/index.php" not within configured docroot

je doit faire tourner phpmyadmin sous quel user:group ??

Nico http://www.beroot.org

tom:
il ne faut pas mettre de chmod 777 sur les fichiers. Au contraire, il faut attribuer des droits que pour le propriétaire du fichier, donc lance un chmod go-rwx et ça devrait passer.

fred:
en fait, tu sort du docroot défini, c'est à dire la racine dans laquelle suphp accepte des fichiers. Regarde le 2ème point dans la partie "Résolution des problèmes".

Opimon 

Coucou tous le monde.
Même problème que certain avec le fichier suphp.conf qui n'est pas la. Pourtant j'ai bien installer les 2 paquets "libapache2-mod-suphp" et "suphp-common"

BestPig 

meme problème, j'ai aussi installé les 2 paquet

Ajouter un commentaire

 *

* Nécessaire mais ni communiqué, ni affiché.