Intereting Posts
Ошибка безопасности AWS SSL: 60: SSL-сертификат …: невозможно получить сертификат локального эмитента Я бы хотел, чтобы json_encode в PHP возвращал массив JSON, даже если индексы не в порядке Использование PHP в качестве механизма шаблона getimagesize и https несколько флажков с php в таблице Guzzlehttp – Как получить тело ответа от Guzzle 6? Как я могу захватить результат var_dump в строку? Импорт CSV-данных с использованием PHP / MySQL – синтаксис Mysqli Может ли кто-нибудь помочь мне разобраться в значении этого сообщения об ошибке php? Аутентификация Laravel Rest при отправке через HttpClient Android Получите мета-описание и название страницы на любой странице Magento filter_var или настраиваемая функция проверки подлинности электронной почты в php Twitter API: Кто от меня отказался? Php form проверяется, когда значение флажка в массиве mysql-запроса? Как разделить разделенный запятыми отдельный столбец на несколько столбцов в php mysql

Вызов неопределенной функции oci_connect, php_oci8_12c.dll, windows 8.1, php5.6.6

У меня есть простой скрипт php:

<?php $db_user = 'myusername'; $db_pass = 'mypassword'; $db_sid = 'mysid'; $conn = oci_connect( $db_user, $db_pass, $db_sid ); ?> 

Когда я запускаю его (из браузера или из командной строки), я получаю ошибку:

 Call to undefined function oci_connect 

Я использую php 5.6.6, который уже появился с php_oci8_12c.dll.

У меня есть extension=php_oci8_12c.dll в моем php.ini

Я установил мгновенный клиент (12.1) – попробовал 32-битную версию и 64-битную версию

У меня есть переменные среды ORACLE_HOME и TNS_ADMIN, указывающие на папку клиента (C: \ instantclient_12_1).

У меня также есть C: \ instantclient_12_1 в моем пути

У меня есть tnsnames.ora в той же папке с этой соответствующей записью:

 MYSID = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = myhost.net)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MYSERVICE) ) ) 

Я также загрузил SQLDeveloper с http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html

SQLDeveloper работает, распознает вышеупомянутые tnsnames.ora и соединяется и успешно запускает запрос в той же базе данных, к которой пытается обратиться PHP-скрипт.

Я провел несколько часов в течение нескольких дней, пытаясь разобраться в разных вещах безрезультатно.

Я использую:

 php 5.6.6 windows 8.1 IIS (so no answers involving apache please) cmd (run as administrator) Oracle Database 11g Enterprise Edition 11.2.0.3.0 

Некоторая другая информация, которая может оказаться полезной:

В идеале я бы хотел использовать oci 1.4.10 для соответствия производственному серверу, но пока не слишком беспокоился об этом.

 pear install oci8-1.4.10.tgz 

дает мне эту ошибку:

 The DSP oci8.dsp does not exist 

Я не могу найти никакого объяснения этой ошибки, что для меня значит.

Что мне не хватает – кто-нибудь может мне помочь

РЕДАКТИРОВАТЬ:

Я пробовал различные предложения в других сообщениях о stackoverflow, а именно:

extension=oci8.so с extension=php_oci8_12c.dll и без него extension=php_oci8_12c.dll

У меня нет extension=php_oracle.dll строки extension=php_oracle.dll в файле php.ini

РЕДАКТИРОВАТЬ:

phpinfo сообщает мне, что я использую правильный файл php.ini:

 Loaded Configuration File => C:\php5.6.6\php.ini 

Эта строка из phpinfo также может быть полезна:

 Configure Command => cscript /nologo configure.js "--enable-snapshot-build" "--enable-debug-pack" "--disable-zts" "--disable-isapi" "--disable-nsapi" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared" "--with-oci8-12c=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared" "--with-enchant=shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet=shared" "--with-mcrypt=static" "--without-analyzer" "--with-pgo" 

РЕДАКТИРОВАТЬ:

Похоже, что файлы dsp являются файлами проекта VC ++. Теперь я решаюсь узнать, как создать расширение php, и, надеюсь, когда я это сделаю, у меня будет достаточно знаний, чтобы скомпилировать исходный код oci8 1.4.10 в dll, который работает над окнами 8 – если кто-то не спасет меня ответом на этот вопрос – похоже, что это займет у меня некоторое время 🙂

РЕДАКТИРОВАТЬ:

Добавление display_startup_errors = On в php.ini сообщает мне, что oci dll не является допустимым приложением Win32

Редактировать: Хмм. Попытка этого в Windows 8, похоже, генерирует ту же ошибку, что и вы указали. Я в настоящее время расследую …

Моя ошибка (я включил неверную строку extension_dir ). Он работает в Win8, как описано ниже.


Следующие шаги должны быть все, что вам нужно, чтобы заставить OCI работать с PHP (я только что проверил это на только что установленной виртуальной машине Windows 2008 R2 Standard x64):

  • Загрузите и извлеките PHP (я использовал C:\php из php-5.6.7-nts-Win32-VC11-x86.zip ).
  • Загрузите и извлеките InstantClient (я использовал C:\instantclient_12_1 из instantclient-basic-nt-12.1.0.2.0.zip ).
  • Добавьте указанные пути к системному пути.
  • Скопируйте c:\php\php.ini-production в c:\php\php.ini .
  • в php.ini :
    • enabled extension_dir = "ext" .
    • с extension=php_oci8_12c.dll линии extension=php_oci8_12c.dll .
  • Установите Microsoft Visual C ++ 2010 Runtime (x86). Это необходимо для расширения OCI8.
  • Установите Microsoft Visual C ++ 2012 Runtime (x86). Это необходимо для PHP.

На данный момент запуск php --ri oci8 в командной строке показывает мне следующий результат:

 C:\>php --ri oci8 oci8 OCI8 Support => enabled OCI8 DTrace Support => disabled OCI8 Version => 2.0.9 Revision => $Id: f5a3ee1083d1ffa6adb5143efda6eafa210b8414 $ Oracle Run-time Client Library Version => 12.1.0.2.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 

И проверка функции oci_connect :

 C:\>php -r "var_dump(function_exists('oci_connect'));" bool(true) 

В дополнение к тому, что, как было сказано, устраняет проблему, я хотел бы добавить сторону CLI php CLI , поскольку некоторые люди должны запускать приложения с поддержкой OCI в режиме CLI. В моем случае мне пришлось скопировать экземпляр oci.dll в oci.dll wamp/bin/php/php<version>/ для php --ri oci8 чтобы показать, что oci8 был правильно загружен. Это не доказывает, что другие файлы не нужны для правильного запуска полноценного приложения (см. Мою техническую сноску). Включение пути к дистрибутиву instantclient 12 не сделало бы этого.

Технические примечания: Моя среда: Windows 7 + WAMP3 (php 5.6.15, apache 2.4.17), после нескольких экспериментов я смог сузить минимальный набор из трех файлов, которые нужно было скопировать в корзину (Apache для не-cli-приложений) из дистрибутива instantclient 12, чтобы создать экземпляр адаптера Oracle в Zend Framework, выполнить SQL-запрос и прочитать набор записей.

Этот набор: oci.dll , oraociei12.dll и orans.dll .

В частности, копирование только oci.dll не позволит приложению работать (неизвестно, что Исключение было поднято)