Bonjour à tous !
Il y a déjà quelques sujets sur la question mais ils sont différents de ma problématique et datent un peu, alors je me lance dans un nouveau:
Voilà on est en train de finaliser la migration de nos vieux serveurs Windows 2003 vers des 2012 R2, et il m'incombe la tâche de le faire pour un serveur Web dont je me suis occupé .... il y a 8 ans.. Bref je suis un peu rouillé, et j'ai besoin d'aide car je cale un peu là ...
Vieux Serveur :
Windows 2003
Apache 2.2
PHP 5.2.1
Client Oracle 10.2
Nouveau Serveur :
Windows 2012 R2 x64
Apache 2.4
PHP 5.6.6
Client Oracle 12c (full)
Conformément aux instructions d'installation sur Windows, j'ai uncomment la ligne suivante dans le php.ini :
extension=php_oci8_12c.dll |
et j'ai vérifié que la DLL en question se trouve bien dans le répertoire /ext , et que celui-ci est bien référencé comme "extension_dir" dans ce même fichier php.ini
Je tente ensuite une connexion vers Oracle avec le code suivant :
Code :
- $conn = ora_logon("USER@InstanceTNSname", "PASSWORD" );
- if ($conn) {
- echo "<p> CONNECTION OK</p>"; }
|
les TNS sont correctement définis, et j'arrive à me connecter manuellement via SQL*Plus à l'instance mentionnée avec les credentials utilisés ici.
Le résultat de la page:
Fatal error: Call to undefined function ora_logon() in C:\Apache24\htdocs\testOracle.php on line 1 |
Alors, je sais, les fonctions ora_* sont dépréciées depuis de nombreuses années. Seulement dans le code que je dois migrer il n'y a QUE ça et je n'ai pas le courage de devoir tout remplacer par les équivalents oci_. Cependant il semble que je doive quand même le faire ... En effet, lorsque je tente, sur la même page de test, d'utiliser le oci_connect correct avec le code suivant, voyons ce que ça donne :
Code :
- $conn = oci_connect('USER', 'PASSWORD','InstanceTNSname');
- if ($conn) {
- echo "<p> CONNECTION OK</p>"; }
|
et là, la page crash. Le bon vieux message du browser "This page can’t be displayed" (IE) ou encore "The Web Server may be down, too busy, or experiencing other problems preventing it from responding to requests" (Firefox).
Je ne vois rien dans les logs Apache par défaut.
Si, en guise de test, j'omets volontairement de spécifier le TNS (càd. oci_connect("USER", "PASSWORD" )), j'obtiens le message d'erreur suivant:
Warning: oci_connect(): ORA-12560: TNS : erreur d'adaptateur de protocole in C:\Apache24\htdocs\testOracle.php on line 1 |
ce qui est donc logique (paramètre TNS null) et surtout confirme que la fonction est bel et bien reconnue.
Dernier élément un peu étrange, le phpinfo() donne l'info suivante pour la valeur "Configure Command":
cscript /nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=c:\php-sdk\oracle\x64\instantclient_12_1\sdk,shared" "--with-oci8-12c=c:\php-sdk\oracle\x64\instantclient_12_1\sdk,shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet=shared" "--with-mcrypt=static" "--without-analyzer" "--with-pgo" |
Je n'ai jamais spéficié ce répertoire "C:\php-sdk" lors de toutes mes manoeuvres. Apparemment le "Configure Command" doit se changer ... en recompilant PHP (instructions sur Linux) ou.. en utilisant les extensions dans le php.ini (Windows), ce qui est exactement ce que je fais. Je vous note quand même cette valeur étrange de Configure Command...
Donc mes questions :
1. Idéalement, je voudrais pouvoir utiliser les fonction ora_*, mais celles-ci ne semblent totalement plus supportées avec la DLL du 12c. Est-ce qu'il y a une confirmation officielle de cela quelque part ? Sinon que dois-je faire pour les faire fonctionner ?
2. La conversion de toutes les fonctions en oci_* serait un travail lourd mais s'il est obligatoire, il faudra bien dégager du temps pour ça. Mais apparemment la fonction oci_connect() ne veut même pas se connecter et je n'ai aucun message d'erreur pertinent. Est-ce que quelqu'un aurait des tuyaux à ce sujet (tests supplémentaires à faire , etc.) pour que je puisse me connecter via PHP 5.6.6 sur Apache 2.4 à une DB Oracle ?