Versions :
- Fedora 16
- Lighttpd 1.4.28
- PHP 5.1.3
Vous la trouverez ici.
Compilation de PHP
On va ajouter comme prfixe d'installation /usr/local/php-free.fr pour ne pas mélanger cette version avec celles déjà existantes sur le système.
On extrait l'archive :
$> tar -zxvf php-5.1.3.tar.gz
$> cd php-5.1.3
Pour les dépendances (sous Fedora) :
#> yum-builddep php
Configuration avant compilation :
$> ./configure --with-libdir=lib64 --prefix=/usr/local/php-free.fr --program-suffix=-cgi --enable-safe-mode --disable-ipv6 --enable-discard-path --disable-cli --enable-fastcgi --enable-force-cgi-redirect --enable-memory-limit --with-zlib --enable-bcmath --with-bz2 --enable-calendar --with-curl --enable-exif --with-gd --with-ttf --with-t1lib --enable-mbstring --with-gettext --with-mcrypt --with-mhash --with-mysql --enable-sockets --enable-sqlite-utf8 --enable-wddx --with-xsl --with-inifile
Pour postgres :
--with-pgsql
Si vous utilisez les bases de données Berkley et autres :
--enable-dba --with-gdbm --with-db4 --with-cdb --with-flatfile
Attention l'option --with-libdir=lib64 est à ajouter seulement si votre système est 64 bits et qu'il installe les librairies dans le dossier /usr/lib64.
Puis classiquement :
$> make
$> su -c 'make install'
'CURLOPT_FTPASCII' undeclared (first use in this function)
'CURLOPT_PASSWDFUNCTION' undeclared (first use in this function)
Supprimer la ligne 309 et insérer #define CURLOPT_FTPASCII CURLOPT_TRANSFERTEXT à la ligne 240 du fichier ./ext/curl/interface.c.
Sous mageia, j'ai eu un problème car l'appel à curl-config qui ne retournait pas de résultat valide :
$> curl-config --version
libcurl -
Au lieu de libcurl 7.21.5 (je n'ai pas eu ce problème sous Fedora).libcurl -
Pour éviter le problème éditer le fichier /usr/bin/multiarch-x86_64-linux/curl-config :
- soit écrire directement libcurl X.XX.X suivant la version que vous avez
- soit remplacer libcurl - par echo libcurl `curl --version | grep libcurl | sed 's/curl //' | sed -e 's/ .*//'`
Configuration de Lighttpd
J'utilise lighttpd car je le trouve plus simple à configurer que apache pour ce genre de chose.
On va utiliser les modules fastcgi et simple vhost.
Pour fastcgi :
##
## /etc/lighttpd/conf.d/fastcgi.conf
## ----------------------------------
##
server.modules += ( "mod_fastcgi" )
fastcgi.map-extensions = ( ".php3" => ".php", ".php4" => ".php" )
fastcgi.server = ( ".php" => ( "localhost" => (
"bin-path" => "/usr/bin/php-cgi",
"socket" => socket_dir + "/php-fastcgi.socket",
"max-procs" => 10,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "10",
"PHP_FCGI_MAX_REQUESTS" => "4000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
)))
Ce fichier est donné en exemple de configuration car seule la première ligne est réellement utile pour notre configuration.## /etc/lighttpd/conf.d/fastcgi.conf
## ----------------------------------
##
server.modules += ( "mod_fastcgi" )
fastcgi.map-extensions = ( ".php3" => ".php", ".php4" => ".php" )
fastcgi.server = ( ".php" => ( "localhost" => (
"bin-path" => "/usr/bin/php-cgi",
"socket" => socket_dir + "/php-fastcgi.socket",
"max-procs" => 10,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "10",
"PHP_FCGI_MAX_REQUESTS" => "4000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
)))
Bien sûr la configuration ici est pour la version officielle de PHP de ma distro.
Pour simple_vhost :
##
## /etc/lighttpd/conf.d/simple_vhost.conf
## ---------------------------------------
##
server.modules += ( "mod_simple_vhost" )
## /etc/lighttpd/conf.d/simple_vhost.conf
## ---------------------------------------
##
server.modules += ( "mod_simple_vhost" )
$HTTP["host"] != "localhost" {
simple-vhost.server-root = "/home/luc/Public"
simple-vhost.default-host = ""
simple-vhost.document-root = "www"
}
simple-vhost.server-root = "/home/luc/Public"
simple-vhost.default-host = ""
simple-vhost.document-root = "www"
}
Et enfin voici mon fichier de configuration de mon hôte virtuel :
##
## /etc/lighttpd/vhosts.d/monsite.conf
## ---------------------------------------
##
$HTTP["host"] == "luc.free\.loc" {
fastcgi.server = ( ".php" => ( "free.loc" => (
"bin-path" => "/usr/local/php-free.fr/bin/php-cgi",
"socket" => socket_dir + "/php-free.socket",
"max-procs" => 1,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "10",
"PHP_FCGI_MAX_REQUESTS" => "250"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
)))
## /etc/lighttpd/vhosts.d/monsite.conf
## ---------------------------------------
##
$HTTP["host"] == "luc.free\.loc" {
fastcgi.server = ( ".php" => ( "free.loc" => (
"bin-path" => "/usr/local/php-free.fr/bin/php-cgi",
"socket" => socket_dir + "/php-free.socket",
"max-procs" => 1,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "10",
"PHP_FCGI_MAX_REQUESTS" => "250"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
)))
simple-vhost.server-root = "/home/luc/Public/"
simple-vhost.default-host = "luc.free.loc"
simple-vhost.document-root = "/"
}La première partie sert à utiliser la version de PHP nouvellement compilé. et la deuxième redirige les url du type http://luc.free.loc/path/to/file.php vers le script /home/luc/Public/luc/path/to/file.php.
Le php.ini
Pour terminer la configuration il faut modifier certaines valeurs de variables de php.
Attention dans votre développement vous pouvez modifier ces valeurs avec l'appel à ini_set(), certaines valeurs ne sont pas modifiable chez free, je vous conseille de ne pas l'utiliser.
; /usr/local/php-free.fr/lib/php.ini
[PHP]
asp_tags = On
error_reporting = 65535
include_path = "/home/luc/Public/luc.free.fr/include:.:/usr/local/php-free.fr/lib/php"
max_execution_time = 20
max_input_time = 60
memory_limit = 32M
output_buffering =
post_max_size = 3M
safe_mode_exec_dir =
error_reporting = 65535
include_path = "/home/luc/Public/luc.free.fr/include:.:/usr/local/php-free.fr/lib/php"
max_execution_time = 20
max_input_time = 60
memory_limit = 32M
output_buffering =
post_max_size = 3M
safe_mode_exec_dir =
[general]
default_socket_timeout = 5
[fcgi]
cgi.fix_pathinfo = On
[mbstring]
mbstring.internal_encoding =
[pgsql]
pgsql.max_links = 1
Mises en garde :
- avec cette configuration les fichiers de sessions ne sont pas stocké dans le dossier sessions.
- Cette configuration est spécifique à un seul site (cf include_path).
Pour finir
Pour tester j'ai créé des fichiers info.php qui contiennent <?php phpinfo(); ?> dans les dossiers /home/luc/Public/luc, /var/www/lighttpd.
# service lighttpd start
Reste plus qu'à tester les adresse http://localhost/info.php et http://luc.free.loc/info.php et voir si les versions de PHP diffèrent.
Pour les utilisateurs de Fedora il faut résoudre le problème de contexte de SELinux pour lancer lighttpd :
# restorecon -v /usr/local/php-free.fr/bin/php-cgi
Et pour les fichiers :
$ chcon -R -h -t httpd_sys_content_t /home/luc/Public/luc.free.loc
Aucun commentaire:
Enregistrer un commentaire