Compiler PHP avec oci8

Le but est de recompiler php pour activer le support d'oracle à travers oci8. La recompilation va fournir le module pour Apache 1.3 et 2. La méthode présentée utilise Debian et le client Oracle 10g.

Préparation du système

PHP 4

Pour recompiler php, il faut récupérer les sources de php ainsi que les bibliothèques qui seront liées :

cd /usr/src
apt-get install php4-dev
apt-get source php4
apt-get install librecode-dev apache-dev apache2-prefork-dev chrpath debhelper \
  freetds-dev po-debconf libbz2-dev libc-client-dev libcurl3-dev libdb4.2-dev \
  libexpat1-dev libfreetype6-dev libgcrypt11-dev libgd2-xpm-dev libjpeg62-dev \
  libkrb5-dev libldap2-dev libmcal0-dev libmhash-dev libmysqlclient12-dev \
  libncurses5-dev libpam0g-dev libpcre3-dev libpng12-dev libsablot0-dev libsnmp5-dev \
  libt1-dev libtool libwrap0-dev libxmltok1-dev libxml2-dev libxslt1-dev libzzip-dev \
  re2c unixodbc-dev devscripts

Pour compiler avec le support de Postgresql :

apt-get install postgresql-dev

Oracle

Il est nécessaire d'installer les bibliothèques du client Oracle. Ici on utilisera la dernière version disponible (10g) sur le serveur oss.oracle.com. Il faut que le client soit installé avant de lancer la compilation de php. Il faut donc modifier le fichier /etc/apt/sources.list

deb http://oss.oracle.com/debian unstable main non-free
apt-get install oracle-xe-client libaio

Si pas assez de swap RAM : 256 Mo mini, swap 1000 Mo mini (pas 999 Mo, ca ne marchera pas) :

dd if=/dev/zero of=/swapfile bs=1M count=600
mkswap /swapfile
swapon /swapfile

Paramétrage de l'environnement

Pour que le client Oracle fonctionne il faut déclarer quelques variables d'environnement, on peut les placer dans le fichier /etc/oracle/env.sh, puis on "sourcera" ce fichier au besoin :

export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
export LD_PRELOAD=libclntsh.so.10.1
source /etc/oracle/env.sh

Ensuite il faut modifer le fichier /etc/ld.so.conf pour ajouter :

/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib

Puis on met à jour les chemins :

ldconfig

Compilation de PHP

cd /usr/src/php4-4.3.10

Dans le fichier debian/rules, il faut modifier la section nommée COMMON_CONFIG = [...] et ajouter –with-oci8 aux règles de compilation.

Ensuite il faut mettre à jour le changelog et mettre quelque chose de parlant dans le numéro de version :

debchange -i

Il ne reste plus qu'a lancer la compilation :

cd /usr/src/php4-4.3.10-16
dpkg-buildpackage

Les .deb vont apparaître dans le répertoire /usr/src/. Pour les installer il suffit d'utiliser dpkg :

dpkg -i libapache-mod-php4_4.3.10-16.oracle_i386.deb php4-common_4.3.10-16.oracle_i386.deb php4-ldap_4.3.10-16.oracle_i386.deb

Configuration d'Apache

Une fois Apache, PHP et le client Oracle installé sur le machine finale, il faut configurer Apache afin qu'il connaise l'emplacement du client Oracle. Pour cela il faut éditer le script de démarrage d'Apache, /etc/init.d/apache et ajouter en haut :

source /etc/oracle/env.sh

Ensuite il faut redémarrer Apache.

Si cela ne marche pas

Souvent on obtient une erreur au démarrage d'Apache signalant que le fichier libclntsh.so.10.1 ne peut être chargé. Dans ce cas il faut vérifier que les variables d'environnement on bien été configurées dans le fichier /etc/init.d/apache et que $ORACLE_HOME/lib apparaît bien dans le fichier ld.so.conf et qu'il a bien été rechargé (ldconfig).