Utiliser une base de données Oracle avec PHP | Babash
par francois · 29 mai 2015
La configuration d’un serveur Redhat pour exploiter une base de données Oracle est toujours compliquée.
Ici, je vous fait un petit résumé de ce que j’ai appliqué afin de faire tourner un script PHP qui interroge une base de donnée Oracle.
La solution classique est d’installer le client Oracle, OCI et d’utiliser PHP et PDO. Seulement, utiliser PDO avec le client Oracle nécessite d’installer le driver pdo_oci et là, la galère commence.
Dans ce tuto, je vais vous expliquer comment faire pour s’affranchir de l’installation de pdo_oci grâce à une superbe librairie nommée PDOOCI.
Avant de commencer…
J’ai réalisé cela sous une Redhat, avec le client 12.1 de Oracle. Je vous laisse donc remplacer les commandes « yum » par leurs équivalentes « apt » pour Debian/Ubuntu et de corriger la version 12.1 de Oracle par celle que vous utiliserez lorsque vous lirez ces lignes.
Client Oracle
Téléchargez les clients « basic » et « devel » Oracle depuis la page officielle de Oracle.
Notez que le client est pour un processeur 64bits. Si votre serveur est en 32bits, vous devrez télécharger les paquets x86.
Idem pour les rpm et les deb pour Redhat et Debian/Ubuntu.
Installation
Une fois téléchargés, installez les via la commande suivante:
rpm -Uvh oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
rpm -Uvh oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm |
Variables d’environnement
Tapez ceci :
ORACLE_HOME=/usr/lib/oracle/12.1/client64; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
ORACLE_HOME=/usr/lib/oracle/12.1/client64; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH |
Et ajoutez les dans le fichier « ~/.bash_profile » si vous souhaitez les conserver à la prochaine ouverture de session.
Une partie du fichier ressemblera donc à ceci :
# User specific environment and startup programs ORACLE_HOME=/usr/lib/oracle/12.1/client64; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH PATH=$PATH:$HOME/bin export PATH
# User specific environment and startup programs ORACLE_HOME=/usr/lib/oracle/12.1/client64; export ORACLE_HOME LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH |
Installation de PHP, PEAR, DEVEL et PDO
La version 12.1 d’Oracle nécessite d’avoir « php-pear » et « php-devel » dans une version de PHP supérieure à 5.2. Vérifiez leur présence et leur via cette commande :
Si cela ne convient pas, installez les, dans la version proposée par « yum », à savoir, pour ma part la 5.3 :
yum install php53-pear php53-devel
yum install php53-pear php53-devel |
Sachez que pour la suite, nous aurons besoin de PDO, profitez en pour l’installer si besoin :
Installation de OCI
Tapez cette commande :
Peut être devrez- vous mettre à jour via la commande :
pecl channel-update pear.php.net
pecl channel-update pear.php.net |
On vous demandera de renseigner le chemin vers le client oracle, entrez ceci :
instantclient,/usr/lib/oracle/12.1/client64/lib
instantclient,/usr/lib/oracle/12.1/client64/lib |
Ajouter l’extension OCI à PHP
Ouvrez le fichier « php.ini » et ajoutez la ligne suivante pour activer OCI :
A présent, dans une installation classique, vous devriez installer le driver « pdo_oci ». C’est la partie la plus embêtante parce que pdo_oci date de 2005 et n’est plus à jour. Il faut modifier le fichier « config.m4 » avant de compiler, j’ai eu des erreurs etc.. bref, pas pratique du tout !
Pour ma part, j’ai trouvé sur Github, une classe PHP qui nous affranchi de cela :
Utilisation de la classe PHP PDOOCI
La classe PHP nommée PDOOCI permet d’interroger une base de données Oracle sans pdo_oci.
- Téléchargez donc les fichiers « pdooci.php » et « statement.php » depuis le dépôt Github,
- Placez les avec vos fichiers PHP,
- Faites appel au fichier « pdooci.php » via la commande PHP :
Corrigez ensuite votre code PHP :
$pdo = new PDO(« oci:dbname=mydatabase;charset=utf8 », « user », « password »);
$pdo = new PDO(« oci:dbname=mydatabase;charset=utf8 », « user », « password »); |
Par celui-ci :
$pdo = new PDOOCI\PDO(« mydatabase », « user », « password »);
$pdo = new PDOOCI\PDO(« mydatabase », « user », « password »); |
A part cette ligne de connexion, le reste de votre code ne changera pas car il a été écrit et sera interprété par PDO, la couche d’abstraction.
Étiquettes : centosoraclepdopdoocipdo_ocipearpeclPHPphp-cliredhat