Компиляция PHP 5.4 с драйвером PDO-OCI с использованием клиента Oracle Instant 10.2.0.4

Я скачал Instant Client 10.2.0.4 basic и sdk zip файлы с загрузок Instant Client для Mac OS X (Intel x86),

Я извлек в папку, как показано ниже

-rw-r--r--@ 1 MNV_Kishore  1000     278 Apr  1  2009 BASIC_README
-r--r--r--@ 1 MNV_Kishore  1000 1609607 Feb  2  2008 classes12.jar
-rwxr-xr-x@ 1 MNV_Kishore  1000     34168 Apr  1  2009 genezi
lrwxr-xr-x  1 MNV_Kishore  wheel        20 Dec  2 18:10 libclntsh.dylib -> libclntsh.dylib.10.1

-rwxr-xr-x@ 1 MNV_Kishore  1000   25582048 Mar 31  2009 libclntsh.dylib.10.1
-rwxr-xr-x@ 1 MNV_Kishore  1000 2062528 Mar  3  2009 libnnz10.dylib
lrwxr-xr-x  1 MNV_Kishore  wheel        18 Dec  2 18:10 libocci.dylib -> libocci.dylib.10.1
-rwxr-xr-x@ 1 MNV_Kishore  1000 1277896 Mar  3  2009 libocci.dylib.10.1

-rwxr-xr-x@ 1 MNV_Kishore  1000   72626768 Apr  1  2009 libociei.dylib
-rwxr-xr-x@ 1 MNV_Kishore  1000     118672 Mar 25  2009 libocijdbc10.dylib
-rwxr-xr-x@ 1 MNV_Kishore  1000     118672 Mar 25  2009 libocijdbc10.jnilib
-r--r--r--@ 1 MNV_Kishore  1000 1555682 Feb  2  2008 ojdbc14.jar
drwxr-xr-x@ 7 MNV_Kishore  wheel    238 Apr  1  2009 sdk

Все заголовочные файлы.h присутствуют в include dir под sdk

Когда я пытался настроить с помощью команды как...

./configure --with-pdo-oci=instantclient,/usr/local/instantclient_10_2,10.2.0.4

... встречается ошибка ниже

checking for oci.h... configure: error: I'm too dumb to figure out where the include dir is in your instant client install

Может ли кто-нибудь помочь мне с этой ошибкой?

4 ответа

Недавно мы должны были установить это на CentOS, так что пути могут быть немного другими. Также мы использовали предварительно скомпилированный экземпляр PHP и добавили функции OCI8 в качестве отдельного модуля. Перед использованием CentoOS мы установили на наши рабочие станции Mac, используя эти инструкции (они немного устарели, поэтому я не знаю, будет ли это работать с текущими версиями OS X и PHP): http://articles.serenity.de/compiling_php_with_oracle/

Для нашей установки CentOS нам пришлось сделать следующее:

  • Установите / скомпилируйте PHP 5.4 без мгновенной поддержки клиента.

  • Получите базовый пакет InstantClient и SDK и установите их (похоже, у вас уже есть оба).

  • Когда OCI configure scirpt утверждает, что он слишком глуп, чтобы найти заголовки, это не саркастично, поэтому вы настроили гнездо символических ссылок крысы. В CentOS основной клиент установлен в /usr/lib/oracle/10.2.0.3/client64, а файлы SDK - в /usr/include/oracle/10.2.0.3/client64/.

cd /usr/lib/oracle/10.2.0.3/client64
cp /usr/include/oracle/10.2.0.3/client64/* .
ln -s lib/libnnz10.so libnnz.so
ln -s lib/libclntsh.so.10.1 libclntsh.so
ln -s lib/libnnz10.so libnnz10.so
ln -s lib/libclntsh.so.10.1 libclntsh.so.10.1
  • Теперь вы можете установить OCI8 из pecl. Обратите внимание, что в этот момент PDO_OCI не будет работать. Это ТОЛЬКО для драйвера OCI8:

pecl install oci8

  • Для поддержки PDO_OCI вам также необходимо добавить еще несколько символических ссылок:
cd /usr/lib/oracle/10.2.0.3/client64
mkdir sdk
cd sdk && ln -s /usr/include/oracle/10.2.0.3/client64 include
ln -s /usr/lib/oracle/10.2.0.3/client64/sdk/include/ /usr/lib/oracle/10.2.0.3/client/include
ln -s /usr/lib/oracle/10.2.0.3/client64/ /usr/lib/oracle/10.2.0.3/client
ln -s /usr/include/oracle/10.2.0.3/client64/ /usr/include/oracle/10.2.0.3/client
  • PDO OCI не поддерживается в течение нескольких лет, поэтому он не будет устанавливаться напрямую из pecl. Вместо этого вам придется скачать его и внести некоторые изменения. Команда sed обновляет function_entry до zend_function_entry, чтобы он правильно компилировался:
pecl download pdo_oci
tar -xvf PDO_OCI-1.0.tgz
cd PDO_OCI-1.0
sed -i -e 's/function_entry pdo_oci_functions/zend_function_entry pdo_oci_functions/' pdo_oci.c
mkdir include
ln -s /usr/include/php include/php
phpize
cp /usr/include/oracle/10.2.0.3/client64/* ./include
./configure --with-pdo-oci=instantclient,/usr,10.2.0.3
make && make install

На этом этапе PDO_OCI должен работать с вашей установкой PHP. Если у вас все еще есть проблемы, вы можете посмотреть в конфигурации и сделать scirpts, чтобы увидеть, какие каталоги и символические ссылки ожидаются для вашей системы. Брэд говорил буквально, когда сказал, что на это уйдут дни. Надеюсь, это поможет вам работать намного быстрее.

Мне удалось установить модуль PDO_OCI со следующими изменениями (возможно, не самый совершенный soln, но он заработал).

i) Установлены модули InstantClient и SDK в определенной структуре папок, просмотрев скрипт конфигурации /usr/lib/oracle//client/. Вы также можете извлечь моментальный клиент в похожую структуру в usr/include.

ii) Изменен скрипт config.m4 для замены function_entry на zend_function_entry

iii) Поместить все заголовочные файлы в домашний каталог include dir of oracle

iv) Созданы символические ссылки для *.dylib. модули в *.dylib Например: ln -s libclntsh.dylib.10.1 в libclntsh.dylib Обратите внимание, что версия, представленная в файлах библиотеки, должна совпадать с версией создаваемой папки.

Все это было найдено путем просмотра скрипта config.m4 экстракта PDO_OCI

Несмотря на то, что ORACLE_HOME был установлен правильно, я использовал, чтобы получить эту ошибку, поэтому дал экспорт перед запуском configure в директории PDO_OCI-1.0

export ORACLE_HOME=/opt/instantclient_10_2/

Может быть, это просто проблема с автоконфом. Я компилирую последний из исходного кода и работает отлично. Я создаю пост, чтобы объяснить правильную процедуру.

Другие вопросы по тегам