Как установить oacle instantclient и pdo_oci на машину ubuntu?

Мне нужно установить PDO_OCI на машине ubuntu, нет пакета по умолчанию, который я мог бы установить с помощью apt-get.

Есть много учебников, показывающих, как это сделать, но когда я их последую, у меня возникают проблемы, связанные с компиляцией (configure, make, …)

Вот что я сделал:

  1. Я выполнил этот учебник, чтобы установить мгновенный клиент

  2. Установить oci8

    pecl install oci8 

    Я получаю ошибку:

    Ошибка: oci.h не найден

  3. Установка PDO_OCI

     mkdir -p /tmp/pear/download/ cd /tmp/pear/download/ pecl download pdo_oci phpize ./configure –with-pdo-oci=instantclient,/usr,11.2 

    ошибка:

    pdo_driver.h не найден …

Пожалуйста, у вас есть серьезный учебник, который отлично работает на UBUNTU 12.04?

Расширения PDO, PDO_OCI от pecl install устарели, потому что последняя версия PHP имеет встроенную в нее основную установку и эти расширения, в основном, не pecl install .

Я потратил много времени, чтобы попытаться сделать это по нескольким подходам без везения, и, наконец, сам по себе нашел для себя чистый способ: скомпилировать и установить расширения из источника PHP .

Во время компиляции есть некоторые трюки, я подробно описал процесс в своем личном блоге: http://itblog.study.land/how-to-install-php5-pdo_oci-oci8-and-other- расширения-для-убунту /

Здесь перечислены короткие шаги:

  1. Загрузите и установите мгновенный клиент Oracle, затем экспортируйте переменную окружения ORACLE_HOME
  2. Загрузите и скомпилируйте PDO_OCI (и OCI8, если необходимо) из исходных пакетов PHP, есть некоторые трюки, которые вам нужно применить здесь, в том числе:

    sudo ln -s /usr/include/php5/ /usr/include/php

    и отредактируйте Makefile:

    EXTRA_INCLUDES = -I/usr/include/oracle/11.2/client64

  3. Включить расширения и перезапустить веб-сервер

Это было проверено и для Debian 7.6

Надеюсь это поможет.

Ответ – это повторение этой статьи (на русском), которая, в свою очередь, основывается на этом посту с некоторыми исправлениями. После нескольких дней бесплодных поисков он работал гладко для меня.

Предпосылки:

У вас должны быть права администратора

У вас должен быть установлен php5 со следующими пакетами:

 sudo apt-get install php5 php5-dev php-pear php5-cli sudo pecl install pdo 

У вас должна быть установлена ​​библиотека libaio1:

 sudo apt-get install libaio1 

Установка Oracle Instant Client

Загрузите мгновенный клиент Oracle для своей архитектуры процессора и ОС с сайта Oracle (oracle.com/technetwork/database/features/instant-client/index-097480.html).

Для Linux есть 2 варианта мгновенного клиента: пакет RPM для Linux, CentOS, Fedora, Red Hat Enterprise Linux, Mandriva Linux, SUSE Linux и т. Д. ZIP-архив – для всех остальных, не поддерживающих RPM.

Загружаются 2 файла:

instantclient-basic – сам клиент-клиент Oracle

instantclient-sdk – набор библиотек для разработки приложений

Создать каталог для мгновенного клиента Oracle (каталог / opt, зарезервированный для расширений программного обеспечения, подходит для этой цели):

 sudo mkdir -p /opt/oracle/ 

Переместите загруженные файлы в / opt / oracle и переключитесь на папку назначения (при условии, что вы загрузили «zip» архивы в каталог «загрузки» вашего пользователя):

 sudo mv ~/downloads/instantclient-*.zip /opt/oracle/ cd /opt/oracle/ 

Извлечение загруженных архивов:

 sudo unzip instantclient-basic-*-*.zip sudo unzip instantclient-sdk-*-*.zip 

Наконец, у нас есть каталог instantclient_11_2 созданный в /opt/oracle для мгновенного клиента Oracle 11.2.0.2.0. Переименуйте этот каталог в instantclient (обратите внимание на номер версии) и переключитесь на него:

 sudo mv instantclient_11_2 instantclient cd instantclient 

Затем нам нужно будет создать несколько дополнительных каталогов и символических ссылок (обратите внимание на номер версии):

 sudo ln -s /opt/oracle/instantclient/libclntsh.so.* /opt/oracle/instantclient/libclntsh.so sudo ln -s /opt/oracle/instantclient/libocci.so.* /opt/oracle/instantclient/libocci.so sudo ln -s /opt/oracle/instantclient/ /opt/oracle/instantclient/lib sudo mkdir -p include/oracle/11.2/ cd include/oracle/11.2/ sudo ln -s ../../../sdk/include client cd - sudo mkdir -p lib/oracle/11.2/client cd lib/oracle/11.2/client sudo ln -s ../../../ lib cd - 

Создайте файл конфигурации, содержащий имя каталога, в котором необходимо искать и запускать клиентские библиотеки Oracle:

 echo /opt/oracle/instantclient/ | sudo tee -a /etc/ld.so.conf.d/oracle.conf sudo ldconfig 

Поскольку в Ubuntu нет каталога /usr/include/php , но клиент по-прежнему ищет его, мы создадим символическую ссылку на его эквивалент – php5:

 sudo ln -s /usr/include/php5 /usr/include/php 

Установка OCI8

После предыдущих действий расширение oci8 устанавливается с pecl команды pecl :

 sudo pecl install oci8 

вам будет предложено указать путь к мгновенному клиенту Oracle, ответьте на:

 instantclient,/opt/oracle/instantclient 

Создание файла подключения к подключению:

 echo "; configuration for php oci8 module" | sudo tee /etc/php5/conf.d/oci8.ini echo extension=oci8.so | sudo tee -a /etc/php5/conf.d/oci8.ini 

Установка PDO_OCI

Для установки PDO_OCI загрузите его из репозитория груши (pear.php.net).

Обновить список пакетов груши:

 sudo pecl channel-update pear.php.net 

Загрузите и поместите архив в каталог temp:

 sudo mkdir -p /tmp/pear/download/ cd /tmp/pear/download/ sudo pecl download pdo_oci 

Извлечь содержимое архива:

 sudo tar xvf PDO_OCI*.tgz cd PDO_OCI* 

Здесь нам нужно внести config.m4 файл config.m4 поскольку он не содержит информации о нашей версии мгновенного клиента Oracle. Откройте файл и добавьте изменения, отмеченные знаком «+» (оплата за номер версии):

 sudo vim config.m4 

Ниже приведен список двух файлов:

 *************** *** 7,12 **** --- 7,14 ---- if test -s "$PDO_OCI_DIR/orainst/unix.rgs"; then PDO_OCI_VERSION=`grep '"ocommon"' $PDO_OCI_DIR/orainst/unix.rgs | sed 's/[ ][ ]*/:/g' | cut -d: -f 6 | cut -c 2-4` test -z "$PDO_OCI_VERSION" && PDO_OCI_VERSION=7.3 + elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.11.2; then + PDO_OCI_VERSION=11.2 elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.10.1; then PDO_OCI_VERSION=10.1 elif test -f $PDO_OCI_DIR/lib/libclntsh.$SHLIB_SUFFIX_NAME.9.0; then *************** *** 119,124 **** --- 121,129 ---- 10.2) PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD) ;; + 11.2) + PHP_ADD_LIBRARY(clntsh, 1, PDO_OCI_SHARED_LIBADD) + ;; *) AC_MSG_ERROR(Unsupported Oracle version! $PDO_OCI_VERSION) ;; *************** 

Подготовьте среду для расширения php с помощью команды phpize (php.net/manual/ru/install.pecl.phpize.php):

 sudo phpize 

Настройте установщик пакетов и установите пакет (обратите внимание на номер версии):

 sudo ./configure --with-pdo-oci=instantclient,/opt/oracle/instantclient/,11.2 sudo make sudo make install 

Создайте для него файл подключения:

 echo "; configuration for php PDO_OCI module" | sudo tee /etc/php5/conf.d/pdo_oci.ini echo extension=pdo_oci.so | sudo tee -a /etc/php5/conf.d/pdo_oci.ini 

Перезапустите apache и проверьте, были ли установлены расширения:

 sudo /etc/init.d/apache2 restart php -m 

Это руководство может помочь скомпилировать модуль pdo_oci из источника, поскольку версия PECL теперь устарела. Я написал оригинальное сообщение для CentOS 6.6, PHP v5.3.3 и Oracle Instant client v.12.1, но его также следует легко применить и к вашему делу.

Установить пакет разработки PHP

 $ apt-get install php-devel 

Загрузить исходный код PHP

 $ cd /usr/local/src $ mkdir php_source $ cd php_source/ $ wget http://museum.php.net/php5/php-5.3.3.tar.gz $ gunzip php-5.3.3.tar.gz $ tar xvf php-5.3.3.tar 

Подготовьте PDO_OCI для компиляции

Убедитесь, что у вас есть переменная окружения $ ORACLE_HOME. В моем случае это указывало на /usr/lib/oracle/12.1/client64

Перейдите в папку, в которой находятся исходные файлы расширения:

 $ cd php-5.3.3/ext/pdo_oci 

Поскольку мы запускаем клиентскую версию Oracle 12.1, которая не поддерживается приложением расширения, нам нужно сделать некоторые взломы. Номер версии Instant Client должен быть добавлен в файл config.m4, иначе конфигурация не будет выполнена со следующим сообщением об ошибке

 Oracle version ... configure: ошибка: Oracle требовала, чтобы библиотеки OCI8 не были найдены в /usr/lib/oracle/12.1/client64

Откройте файл config.m4 и найдите SUPPORTED_LIB_VERS (строка 5 или около того), добавьте 12.1 в список версий. Также найдите case $PDO_OCI_VERSION in строке (может быть строка 134) и добавьте |12.1 в список версий ниже. Сохраните файл, и это все, что нам нужно здесь.

Подготовьте, настройте и сделайте расширение

 $ phpize $ ./configure $ make 

Теперь make скорее всего не будет жаловаться, что он не сможет найти файлы заголовков Oracle, например oci.h. Это связано с тем, что, если вы не установили сервер Oracle или Instant client в режиме разработчика, файлы на сервере не существуют.

Перейдите на страницу oracle.com, Instant Client Downloads для Linux и получите пакет Instant SDK для вашей версии: Instant Client Downloads для Linux

В моем случае я загрузил этот файл: http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

Распакуйте файл в любом месте по вашему выбору. Необходимые файлы заголовков находятся в папке sdk / include . Скопируйте все эти файлы в папку include расширения: /usr/local/src/php_source/php-5.3.3/ext/pdo_oci/include

Теперь марка должна пройти:

 $ make 

В качестве конечного результата вы получите скомпилированный модуль pdo_oci.so в / modules в вашей папке расширения: /usr/local/src/php_source/php-5.3.3/ext/pdo_oci/modules/pdo_oci.so

Перемещение и включение скомпилированного модуля

Узнайте, где PHP хранит его расширения на сервере

 $ php -i | grep extension_dir 

Скопируйте расширение (pdo_oci.so) в этот каталог.

Теперь есть несколько способов включить модуль. Один из них включает его в основной файл php.ini, но в моем случае я создал отдельный файл .ini в папке, где находятся другие .ini-файлы других модулей и которые включены PHP при запуске.

Поэтому я создал файл /etc/php.d/pdo_oci.ini со следующим содержимым:

 ; Enable pdo_oci extension module extension=pdo_oci.so 

В качестве альтернативы, в файл php.ini можно добавить одну и ту же строку.

Перезапустить Apache и проверить

 $ /etc/init.d/httpd restart 

Если у вас установлен PHP CLI, вы можете проверить список загруженных модулей, иначе создать в нем файл PHP с phpinfo () и проверить выходы. Если вы видите PDO_OCI на выходе – поздравляем!

 $ php -m 

кредиты

Благодаря Mattias Geniar для исходного сообщения о том, как скомпилировать PHP-расширения из источника: https://ma.ttias.be/how-to-compile-and-install-php-extensions-from-source/

установка с помощью PECL устарела, не используйте ее. Вот пошаговое руководство по установке PDO_OCI и мгновенного клиента Oracle на Linux-машине: http://shar.lt/linux-install-oracle-instant-client-php-pdo_oci-library/