Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1593 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2252108
ZeBix
edit > preview
Posté le 02-03-2015 à 17:19:25  profilanswer
 

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 ?

mood
Publicité
Posté le 02-03-2015 à 17:19:25  profilanswer
 

n°2252279
olivthill
Posté le 04-03-2015 à 16:12:49  profilanswer
 

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
n°2252318
Ms 45
I really don't care
Posté le 04-03-2015 à 22:18:00  profilanswer
 

C'est pas au niveau des variables d'environnement du user qui fait la connexion que ça se joue ?
J'ai souvent galéré en exportant une config complète d'un serveur vers un autre en oubliant de donner les bonnes variables dans le script de profil.
(enfin, sous *nux, mais sous win ça doit être pareil, voire pire :o )

 

ex : EXPORT ORACLE_HOME, etc


Message édité par Ms 45 le 04-03-2015 à 22:20:10
n°2252693
skeye
Posté le 09-03-2015 à 16:43:52  profilanswer
 

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


---------------
Can't buy what I want because it's free -
n°2252694
TotalRecal​l
Posté le 09-03-2015 à 16:53:22  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
Arduino et PHP: La galère!Comment corriger mes erreurs ???
Jeu en PHP conception.IDE PHP avec preview comme codeacademy
(FFmpeg-PHP)Comment passer d'un format à un autre[PHP] Que pensez-vous de mon projet ?
Php et IP.Board[...] Php et Checkbox
[RESOLU][PHP][MYSQL]requête Mysql (INSERT)Générer des inputs en PHP
Plus de sujets relatifs à : PHP/Oracle : erreurs avec ora_logon() et oci_connect()


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR