formation

Bienvenue sur le forum de formation


    Cohabitation PHP4 et PHP5 (lunix)

    Partagez
    avatar
    Admin
    Admin
    Admin

    Masculin Messages : 91
    Points : 3049
    Réputation : 7
    Date d'inscription : 21/10/2009

    Cohabitation PHP4 et PHP5 (lunix)

    Message par Admin le Mar 3 Nov - 19:56

    Cohabitation PHP4 et PHP5 (lunix)


    Ce tutoriel a pour objectif de vous aider à installer PHP4 et
    PHP5 sur une même machine.
    Cette manipulation a été testée sur Fedora Core4 ,
    Apache2.0, PHP4.4.0, PHP5.04
    Télécharger l'article au format PDF (288ko)
    I. Introduction

    Avant de suivre ce tutoriel, il convient de faire le point
    sur votre besoin. En effet, il existe plusieurs procédés pour arriver à utiliser
    des scripts PHP4 et PHP5 sur la même machine.


    I.A. Pourquoi ?

    Afin de mieux comprendre quelle peut être votre motivation,
    je vous propose de vous expliquer pourquoi j'ai eu besoin de le faire de cette
    manière.
    Tout commence dans mon milieu professionnel, lorsqu'on me demande de
    créer un serveur avec un profil test. Celui-ci devra pouvoir héberger le fruit
    du travail de deux équipes de développeurs web. Ces applications s'appuyant sur
    une méthodologie objet, l'une avec le moteur PHP4 et l'autre avec PHP5. Ce qui
    traduit une incompatibilité évidente entre les deux types d'applicatif.
    Le
    système installé sur la machine étant Fedora Core 4, avec installation par
    defaut (station de travail), nous avons déjà Apache 2.0 ainsi que PHP5 configuré
    pour être module dynamique d'Apache. Il nous suffit donc d'installer PHP4, reste
    à savoir comment. Nous avons deux solutions, soit on configure 2 instances
    d'Apache avec chacune leur module dynamique PHP (SAPI), soit nous ajoutons PHP4
    en tant que module statique (CGI).


    I.B. Solution CGI

    D'un point de vue fonctionnel, la deuxième solution n'est
    pas pratique car il faudrait donner un moyen au serveur HTTP de distinguer les
    différentes applications et ainsi diriger les requêtes dynamiques vers le moteur
    PHP approprié. C'est à dire qu'il faudrait que tous les fichiers aient
    l'extension .php4 ou alors créer un addHandler propre au répertoire hébergeant
    l'application PHP4. Or, le projet existe déjà depuis un bon moment, et modifier
    les noms de fichiers dans l'arborescence ainsi que tous les liens utilisés
    reléve du défi. Et dans un souci d'homogénité, je préfère avoir deux répertoires
    prêts au déploiement en production. Donc pas de manipulation directe sur un
    htaccess.
    De plus je peux ainsi laisser le choix à une équipe ou l'autre de
    mettre à jour la version stable quand ils le veulent, un ZIP du répertoire et
    hop, c'est fait... Toutefois, si tel est votre choix, il vous faudra créer un
    fichier .htaccess dans le répertoire web concerné, de manière à indiquer à
    Apache, ceci grâce à la directive addHandler quel moteur est censé travailler
    avec les fichiers portant l'extension PHP. Ou encore, comme dit précédemment
    ajouter le addHandler directement dans la conf HTTP et suffixer les fichiers de
    l'extension correspondante ( ex: *.php4 ).


    I.C. Solution SAPI

    La solution que j'ai retenue pour mon projet est donc de
    créer deux instances d'Apache, avec pour chacune d'entre elles, un moteur PHP
    différent basé sur un module dynamique. Ainsi nous aurons deux répertoires web
    distincts avec des fichiers ayant pour extension *.php. Il suffira ensuite, dans
    un esprit développement, je le répète, de faire pointer deux domaines sur ces
    répertoires, un sur Apache port 80 et un sur Apache port 81.


    I.D. Conclusion

    La solution d'employer deux instances du processus httpd,
    s'avère être plus gourmande en terme de ressources système que l'emploi d'un
    mode CGI pour PHP4, même si l'on considère le fait que le CGI engendre un
    processus pour chaque requête vers le moteur PHP. Elle sera donc réservée à un
    serveur de type "Développement", entendez par là : non exploitable en
    production. Si votre but est de tester la compatibilité d'une application sous
    les deux versions de moteur PHP, peut-être gagnerez-vous en temps à changer les
    lignes concernées dans le fichier de configuration d'Apache et de re-démarrer le
    serveur HTTP.


    II. Pré-requis

    Eléments requis pour la réalisation de ce tutoriel


    • Un système d'exploitation Linux
    • Un serveur HTTP
    • Un moteur PHP5

    III. Préparation

    Nous allons commencer par nous munir des éléments
    nécessaires pour la suite de ce tutoriel.
    Vous trouverez les sources PHP4 à
    cette adresse : http://www.php.net
    Décompressez l'archive
    dans le répertoire de votre choix.


    $ tar xzvf php4.x.x.tar.gz
    Nous allons à présent créer les répertoires. Loguez vous en
    tant que super-utilisateur ( root ) et tapez ceci


    # mkdir /var/www/html2 /var/www/cgi-bin2
    # chown -R apache:apache /var/www/html2 /var/www/cgi-bin2
    # chmod -R 755 /var/www/html2 /var/www/cgi-bin2
    # cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd2.conf
    # cp -R /etc/httpd/conf.d /etc/httpd/conf2.d

    IV. Apache

    Commençons par arrêter le démon httpd


    # /etc/init.d/httpd stop
    Puis éditons le fichier de configuration précédemment créé
    /etc/httpd/conf/httpd2.conf.
    Il faut modifier le pid utilisé par
    httpd, le port écouté, le documentRoot et les fichiers de log.
    Recherchez les
    lignes suivantes et modifiez-les comme indiqué.


    PidFile run/httpd.pid => PidFile run/httpd2.pid
    ......
    Listen 80 => Listen 81
    ......
    Include conf.d/*.conf => Include conf2.d/*.conf
    ......
    DocumentRoot "/var/www/html" => DocumentRoot "/var/www/html2"
    ......
    =>
    ......
    ErrorLog logs/error_log => ErrorLog logs/error2_log
    ......
    CustomLog logs/access_log combined => CustomLog logs/access2_log combined
    ......
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" => ScriptAlias /cgi-bin/ "/var/www/cgi-bin2/"
    ......
    =>
    Editons maintenant le fichier inclus
    /etc/httpd/conf2.d/php.conf. Effacez tout le contenu et mettez les lignes
    ci-dessous



    LoadModule php4_module /usr/lib/httpd/modules/libphp4.so
    AddType application/x-httpd-php .php .phtml
    DirectoryIndex index.php
    AddType application/x-httpd-php-source .phps
    Puis le fichier inclus /etc/httpd/conf2.d/ssl.conf,
    il ne nous est pas directement nécessaire, mais si nous ne le faisons pas,
    Apache lors du démarrage nous signalera une incohérence du service SSL (en fait
    un doublon de l'hote avec la première instance).


    Listen 443 => Listen 444
    ......
    =>
    ......
    ErrorLog logs/ssl_error_log => ErrorLog logs/ssl_error2_log
    TransferLog logs/ssl_access_log => TransferLog logs/ssl_access2_log
    Nous pouvons désormais tester la syntaxe de nos fichiers de
    configuration



    # /usr/sbin/httpd -t -f /etc/httpd/conf/httpd.conf
    # /usr/sbin/httpd -t -f /etc/httpd/conf/httpd2.conf
    test des fichiers de configuration


    V. PHP

    Passons à l'installation de PHP4, placez vous dans le
    répertoire que nous avons décompressé tout à l'heure.
    Pour éviter les
    conflits avec la version installée par défaut dans Fedora, nous allons installer
    les binaires dans un répertoire propre (exemple /usr/local/php4) à l'aide
    du paramètre --prefix puis nous mettrons le php.ini avec le paramètre
    --config-file-path dans un repertoire autre que /etc où se trouve celui
    de PHP5. Je choisis pour l'exemple le répertoire conf d'Apache (
    /etc/httpd/conf ).
    L'option --with-gd nous permettra d'utiliser
    la librairie graphique de php, celle-ci nécessite la dépendance zlib ce que nous
    indiquerons grâce au paramètre --with-zlib
    Il nous reste plus qu'à
    inclure l'option --with-apxs2 indiquant au compilateur que PHP sera
    utilisé en tant que module dynamique d'Apache2.


    $ ./configure --enable-track-vars --with-mysql --with-apxs2=/usr/sbin/apxs \
    --prefix=/usr/local/php4 --with-config-file-path=/etc/httpd/conf \
    --with-zlib --with-gd
    $ make
    Puis en tant que root :



    # make install
    Copier le fichier php.ini-dist situé dans le
    repertoire d'installation vers le repertoire choisi avec l'option
    --config-file-path en prenant soin de le renommer en php.ini.



    # cp /home/toto/php4.4.0/php.ini-dist /etc/httpd/conf/php.ini

    VI. Démarrage

    Créons maintenant le script qui nous permettra de démarrer
    l'instance Apache que nous avons configurée.
    Ouvrez votre éditeur préféré et
    copiez-collez le script ci-dessous


    #!/bin/bash
    #
    # httpd-PHP4 Startup script for the Apache HTTP Server Instance 1
    #
    # chkconfig: - 86 14
    # description: Apache is a World Wide Web server. It is used to serve \
    # HTML files and CGI
    # processname: httpd
    # config: /etc/httpd/conf/httpd2.conf
    # config: /etc/sysconfig/httpd
    # pidfile: /var/run/httpd2.pid
    # Source function library.
    . /etc/rc.d/init.d/functions
    httpd=${HTTPD-/usr/sbin/httpd}
    prog=httpd-PHP4
    conf=/etc/httpd/conf/httpd2.conf
    pidfile=${PIDFILE-/var/run/httpd2.pid}
    lockfile=${LOCKFILE-/var/lock/subsys/httpd2}
    RETVAL=0
    start() {
    $httpd -f $conf -k start
    ret=$?
    if [ $ret = 0 ] && touch ${lockfile}; then
    # si tout ok
    action $"Démarrage de $prog: " /bin/true
    else
    # sinon
    action $"Démarrage de $prog: " /bin/false
    fi
    return $ret
    }
    stop() {
    $httpd -f $conf -k stop
    ret=$?
    if [ $ret = 0 ] && rm -f ${lockfile} ${pidfile}; then
    # si arret ok
    action $"Arrêt de $prog: " /bin/true
    else
    # sinon
    action $"Arrêt de $prog: " /bin/false
    fi
    return $ret
    }
    case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    status)
    status $httpd
    ret=$?
    ;;
    restart)
    stop
    start
    ;;
    *)
    echo $"Usage: $prog {start|stop|restart|status}"
    exit 1
    esac
    exit $ret
    Enregistrez votre fichier dans /etc/init.d/httpd2 Il
    faut maintenant lui donner les droits d'exécution et configurer le system V de
    manière à ce que le script prenne effet dès le boot de la machine.


    # chmod +x /etc/init.d/httpd2
    # chkconfig --add httpd2
    # chkconfig --level 345 httpd2 on

    VII. Tests

    Voici arrivé le moment tant attendu, les tests de notre
    nouvelle configuration. Editez un fichier que vous nommerez index.php



    echo phpinfo();
    ?>
    Enregistrez votre fichier dans le répertoire principal
    d'Apache (/var/www/html), puis copiez-le dans le répertoire principal de la
    seconde instance (/var/www/html2).


    # cp /var/www/html/index.php /var/www/html2/index.php
    Passons aux choses sérieuses...Pour démarrer les deux
    instances d'Apache :


    # /etc/init.d/httpd start
    # /etc/init.d/httpd2 start
    Pour vérifier


    # ps aux | grep httpd
    Nous donnera quelque chose comme ceci

    tests apache

    Puis ouvrons notre navigateur sur http://localhost
    et http://localhost:81 pour vérifier que nous avons bien pris en compte
    les deux versions de PHP

    PHP5

    PHP4

    Et voilà, nos équipes sont prêtes à travailler chacune de
    leur côté sur le serveur test.
    Il ne reste plus qu'à mettre en place un
    serveur CVS pour faciliter le développement ;-)




      La date/heure actuelle est Mer 24 Mai - 11:38