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
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 –
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. –
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. –