Мне нужно установить PDO_OCI на машине ubuntu, нет пакета по умолчанию, который я мог бы установить с помощью apt-get.
Есть много учебников, показывающих, как это сделать, но когда я их последую, у меня возникают проблемы, связанные с компиляцией (configure, make, …)
Вот что я сделал:
Я выполнил этот учебник, чтобы установить мгновенный клиент
Установить oci8
pecl install oci8
Я получаю ошибку:
Ошибка: oci.h не найден
Установка 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- расширения-для-убунту /
Здесь перечислены короткие шаги:
ORACLE_HOME
Загрузите и скомпилируйте PDO_OCI (и OCI8, если необходимо) из исходных пакетов PHP, есть некоторые трюки, которые вам нужно применить здесь, в том числе:
sudo ln -s /usr/include/php5/ /usr/include/php
и отредактируйте Makefile:
EXTRA_INCLUDES = -I/usr/include/oracle/11.2/client64
Включить расширения и перезапустить веб-сервер
Это было проверено и для 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 для своей архитектуры процессора и ОС с сайта 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 устанавливается с 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 загрузите его из репозитория груши (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, но его также следует легко применить и к вашему делу.
$ apt-get install php-devel
$ 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
Убедитесь, что у вас есть переменная окружения $ 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 можно добавить одну и ту же строку.
$ /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/