Почему oci_connect() генерирует исключение "неопределенная функция", даже если function_exists('oci_connect') возвращает true?
Последние несколько дней я изо всех сил пытался заставить PHP подключиться к оракулу БД. Я делал это со стеком MAMP, установленным на машине с окнами (он доступен для окон и обеспечивает единый стек разработки для нашей команды). После борьбы с общими проблемами, связанными с установкой OCI8, я наконец-то заставил его показать в phpinfo() следующую информацию : PHP info-раздел OCI8
Я также вижу его как установленный модуль с помощью команды php -m, параметры с помощью команды php --ri oci8, а также могу найти установленные dll-файлы из клиента мгновенного доступа oracle с помощью где oci*
Кажется, он установлен, и у меня есть переменная PATH, связанная с папкой клиента. Нет ошибок, кроме вызова неопределенной функции в лог-файлах MAMP.
Я не установил ORACLE_HOME, TNS_ADMIN или другие переменные оракула, поскольку они не нужны для клиентских библиотек мгновенного доступа (насколько я понимаю)
Я раскомментировал строки для extension_dir и extension=php_oci8_12c.dll в файле php.ini и подтвердил, что я редактировал правильный файл.
Я запустил простой скрипт php в файле index.php, содержащем следующие строки
<?php
If(function_exists('oci_connect')){
echo 'oci_connect exists';
$conn = oci_connect();
}
?>
Это простой тест, который должен дать мне предупреждение о неправильных параметрах, однако вывод скрипта
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
У меня закончились идеи о том, что может быть не так, ни одна из документации, касающейся настройки функциональных возможностей OCI8, не сталкивается с этой проблемой.
Любая помощь приветствуется. Спасибо
Выход из 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
1 ответ
Ты звонишь oci_connect()
без параметров.
Передайте имя пользователя и пароль для вашей базы данных функции, как указано в документации