Компиляция 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/
Может быть, это просто проблема с автоконфом. Я компилирую последний из исходного кода и работает отлично. Я создаю пост, чтобы объяснить правильную процедуру.