PHP/Oracle : erreurs avec ora_logon() et oci_connect()

PHP/Oracle : erreurs avec ora_logon() et oci_connect() - PHP - Programmation

Marsh Posté le 02-03-2015 à 17:19:25    

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 :
  1. $conn = ora_logon("USER@InstanceTNSname", "PASSWORD" );
  2. if ($conn) {
  3. 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 :
  1. $conn = oci_connect('USER', 'PASSWORD','InstanceTNSname');
  2. if ($conn) {
  3. 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  :heink:  (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 ?

Reply

Marsh Posté le 02-03-2015 à 17:19:25   

Reply

Marsh Posté le 04-03-2015 à 16:12:49    

Pour info, voici un bout de code qui marche pour moi, mais j'étais en PHP 4.

 $dbstr = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=".$_SERVER["SERVER_NAME"]." )(PORT=1521)))(CONNECT_DATA=(SID=toto)))";  
 
  // $dbc = oci_connect('utilisateur', 'motdepasse', $dbstr);  // PHP 5
  $dbc = ocilogon('utilisateur', 'motdepasse', $dbstr);        // PHP 4
  if ($dbc == FALSE) {
    $error_msg = "<p>Error: Cannot connect to database.<p>";
    return(False);
  }
 
  // print("Connection OK!!!</p>" ); // Debug


Bien vérifier que le SID est correct en testant par la commande tnsping toto.


Message édité par olivthill le 04-03-2015 à 16:13:59
Reply

Marsh Posté le 09-03-2015 à 16:43:52    

http://php.net/manual/fr/oci8.installation.php
 
Définition de l'environnement Oracle.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 09-03-2015 à 16:53:22    

Cette migration de fou [:ddr555]. Quasiment 10 ans d'un coup.
De bon coeur je te souhaite bonne chance, j'espère que l'appli n'est pas trop grosse vu que tu pourrais bien avoir à la réécrire entièrement :whistle:.


Message édité par TotalRecall le 09-03-2015 à 16:53:51

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed