2017-06-06 1 views
-1

J'ai eu du mal ces derniers jours à obtenir PHP pour se connecter à une base de données Oracle. Je l'ai fait avec une pile MAMP installée sur une machine à fenêtre (elle est disponible pour Windows et assure une pile de développement uniforme pour notre équipe). Après avoir lutté avec les problèmes communs liés à l'installation OCI8 je l'ai finalement montré dans phpinfo() avec les informations suivantes OCI8 PHP info sectionPourquoi oci_connect() lance une exception de "fonction non définie" même si function_exists ('oci_connect') renvoie true?

Je peux aussi le voir comme un module installé en utilisant la commande php -m, les options en utilisant le Commande php --ri oci8, et peut trouver les fichiers dll installés à partir du client instantané oracle où oci *

Il semble être installé et j'ai une variable PATH liée au dossier client instantané. Il n'y a pas d'erreurs en dehors de l'appel à la fonction indéfinie dans les fichiers journaux MAMP.

Je possèderaient pas les ORACLE_HOME, TNS_ADMIN ou d'autres caractéristiques Oracle car ils ne sont pas nécessaires avec les bibliothèques clientes instantanées (ma compréhension)

Je décommenté les lignes pour la extension_dir et l'extension = php_oci8_12c.dll en le fichier php.ini et ont confirmé que j'ai été en train d'éditer le bon fichier.

J'ai couru un simple script php dans un fichier index.php contenant les lignes suivantes

<?php 
    If(function_exists('oci_connect')){ 
     echo 'oci_connect exists'; 
     $conn = oci_connect(); 
    } 
?> 

Ceci est un test simple qui devrait me donner un avertissement se plaindre de paramètres incorrects mais la sortie du script est

oci_connect exists Fatal error: Uncaught Error: Call to undefined function oci_connect() in C:\MAMP\htdocs\Oracle_Connection\index.php:16 Stack trace: #0 {main} thrown in C:\MAMP\htdocs\Oracle_Connection\index.php on line 16

Je suis à court d'idées sur ce qui pourrait être mauvais, aucun des documents en référence à la mise en place de la fonctionnalité de OCI8 semble se heurter à ce problème.

Toute aide serait la bienvenue. Merci

Sortie de cmd

C:\Users\geoff>php -m 
[PHP Modules] 
bcmath 
calendar 
com_dotnet 
Core 
ctype 
date 
dom 
filter 
hash 
iconv 
json 
libxml 
mcrypt 
mysqlnd 
oci8 
odbc 
openssl 
pcre 
PDO 
pdo_mysql 
Phar 
Reflection 
session 
SimpleXML 
soap 
sockets 
SPL 
standard 
tidy 
tokenizer 
wddx 
xml 
xmlreader 
xmlwriter 
zip 
zlib 
[Zend Modules] 

C:\Users\geoff>php function_exists 
Could not open input file: function_exists 

C:\Users\geoff>php --ri oci8 

oci8 

OCI8 Support => enabled 
OCI8 DTrace Support => disabled 
OCI8 Version => 2.1.4 
Revision => $Id: 03698b2e9b50593039b7ca292b2e3cf9eaf064b9 $ 
Oracle Run-time Client Library Version => 12.2.0.1.0 
Oracle Compile-time Instant Client Version => 12.1 

Directive => Local Value => Master Value 
oci8.max_persistent => -1 => -1 
oci8.persistent_timeout => -1 => -1 
oci8.ping_interval => 60 => 60 
oci8.privileged_connect => Off => Off 
oci8.statement_cache_size => 20 => 20 
oci8.default_prefetch => 100 => 100 
oci8.old_oci_close_semantics => Off => Off 
oci8.connection_class => no value => no value 
oci8.events => Off => Off 

Statistics => 
Active Persistent Connections => 0 
Active Connections => 0 

C:\Users\geoff>where oci* 
C:\Oracle\instantclient_12_2\oci.dll 
C:\Oracle\instantclient_12_2\oci.sym 
C:\Oracle\instantclient_12_2\ocijdbc12.dll 
C:\Oracle\instantclient_12_2\ocijdbc12.sym 
C:\Oracle\instantclient_12_2\ociw32.dll 
C:\Oracle\instantclient_12_2\ociw32.sym 
+0

Tout d'abord, Bienvenue sur SO! Avez-vous essayé de redémarrer le serveur? "Essayez sudo service apache2 restart" Mais ce n'est pas votre problème. Le problème est que vous appelez obi_connect sans paramètres! Essayez de lire les documents: 0) https://doc.bccnsoft.com/docs/php-docs-7-fr/function.oci-connect.html –

+0

Oh, et je voudrais reformuler DEFIANTLY la question, APRÈS avoir lu ceci: https : //stackoverflow.com/help/how-to-ask Cela vous épargnera beaucoup de chagrin dans la communauté à l'avenir. Ils peuvent être impitoyables parfois, vivant par le mantra "des questions stupides obtiennent des réponses stupides". Votre question n'est pas stupide, mais elle doit être ... révisée. –

+0

Essayez de charger (via votre navigateur) un script PHP qui appelle phpinfo(). Vous trouverez probablement que OCI8 est manquant. Je soupçonne que votre environnement de serveur Web est différent de votre environnement de ligne de commande: probablement les bibliothèques client Oracle ne sont pas dans PATH. –

Répondre

0

Vous appelez oci_connect() sans paramètre.

passer le nom d'utilisateur et mot de passe pour votre base de données à la fonction comme indiqué dans le documentation

+0

-1. PHP ne fonctionne pas de cette façon. Appeler 'oci_connect' sans paramètres devrait aboutir à:' Attention: oci_connect() attend au moins 2 paramètres, 0 donnés en ... '.Cela montre que le module 'oci8' est chargé et fonctionne, mais vous avez fait une erreur dans la façon dont vous appelez la fonction. – timclutton

+0

C'est vrai, j'ai oublié ça. Je viens de retirer cette partie de la réponse –