Blog


Symfony2 avec Oracle DataBase sous Ubuntu

Le , par .

Utiliser Symfony2 avec Oracle DataBase est un parcours assez peu documenté. Ce billet de blog tente donc de vous accompagner dans la configuration de Symfony2 pour utiliser Oracle DataBase. Attention, ce billet ne vous indique pas comment installer le serveur Oracle ! Nous partons du principe ici que le serveur de base de données existe déjà. On cherche juste à configurer Symfony2 pour se connecter à ce serveur, sous Ubuntu.

Tout d'abord, il va falloir utiliser le module PHP oci8, qui n'est pas présent par défaut sous Ubuntu.

Compilation du module oci8 pour php

Il va nous falloir télécharger et installer plusieurs outils pour compiler ce module. Executez les commandes suivantes :

sudo apt-get install build-essential
sudo apt-get install php5-dev php-pear libaio1

Ensuite, il va nous falloir rajouter des variables d'environnement nécessaire pour l'installation de l'InstantClient. Pour cela, il faut éditer le fichier /etc/environment et ajouter les lignes suivantes :

LD_LIBRARY_PATH="/usr/local/lib/instantclient_11_2"
TNS_ADMIN="/usr/local/lib/instantclient_11_2"
ORACLE_BASE="/usr/local/lib/instantclient_11_2"
ORACLE_HOME=$ORACLE_BASE

Ensuite, téléchargez le package Basic (le premier dans la liste) et le package SDK (le 5ème). A noter qu'il vous faut un compte sur le site d'Oracle pour pouvoir télécharger les fichiers.
Une fois téléchargé, retour sur la console, et saisissez les commandes suivantes :

cd /usr/local/lib
sudo unzip /chemin/vers/l/archive/instant-client-basic
sudo unzip /chemin/vers/l/archive/instant-client-sdk
cd instantclient_11_2
sudo ln -s libclntsh.so.11.1 libclntsh.so
sudo pecl install oci8

Pendant la compilation, on vous demandera le chemin vers la bibliothèque InstantClient. Répondez juste :

instantclient,/usr/local/lib/instantclient_11_2

Le module est maintenant compilé.

Activer le module dans PHP

Pour cela, rien de plus simple : il suffit de créer un fichier oci8.ini dans le répertoire /etc/php5/conf.d et d'ajouter le contenu suivant :

extension=oci8.so

Et bien sûr, n'oubliez pas de redémarrer le serveur Apache :

sudo service apache2 restart

Configuration de Symfony2

Ouvrez le fichier de configuration app/config/config.yml ainsi que le fichier app/config/parameter.yml.
Dans le fichier parameter.yml, renseignez l'adresse et le port (par défaut : 1521) du serveur hôte de la base de données. Renseignez ensuite le nom d'utilisateur, le mot de passe et le nom de la base de données (SID). Changez aussi le driver pdo_mysql par oci8.

Et voilà, c'est terminé ! Il est cependant possible que vous ayez des erreurs avec les champs date. En effet, Doctrine attend un certain format de date (Y:m:d H:i:s) alors que Oracle, en fonction de sa configuration, peut fournir les dates sous un autre format. Pour régler ce soucis, dans le fichier config.yml, rajoutez à la fin :

services:
    listener:
        class: Doctrine\DBAL\Event\Listeners\OracleSessionInit 
        tags:
            - { name: doctrine.event_listener, event: postConnect }

C'est un Doctrine Listener inclu dans Doctrine qui devrait résoudre le problème, il n'est pas activé par défaut.

Catégories : Blog

Retour à la liste

Commentaires

Le , a écrit :

hhh


Le , a écrit :

merci pour l'article


Le , a écrit :

bravo


Le , a écrit :

jhk


Le , a écrit :

Très bon boulot merci mon grand!!


Le , a écrit :

krkrkrkrkr


Le , a écrit :

goo


Le , a écrit :

merci


Le , a écrit :

trop bon


Le , a écrit :

merci pour l'article


Le , a écrit :

ioioooo


Le , a écrit :

UYTUYT


Le , a écrit :

Super tuto <3


Le , a écrit :

Super Article


Le , a écrit :

merci pour l'article


Le , a écrit :

merci pour l'article

J'ai pu trouver dans mes recherches un site de tutoriel vidéos assez bien fait traitant de plusieurs nouvelles technologies notamment d'oracle Voila le lien au cas cela puisse intéresser quelqu'un http://www.alphorm.com/formation/formation-oracle-database-11g-dba-1-1z0-052 :)


Le , a écrit :

merci pour l'article


Le , a écrit :

merci pour votre article


Le , a écrit :

Je tiens déjà à remercier winzou pour avoir eu la gentillesse d'accepter mon article sur son blog. Puisse ce billet aider un maximum de personnes.


Poster un nouveau commentaire