Установка
Установка OCI8 из PECL
Модуль OCI8 может быть включён в текущую установку PHP как
автоматически, так и вручную с помощью
» PECL.
-
Если ваш компьютер находится за файерволом, установите прокси для
PEAR, например:
-
Запустите
Для PHP 7, используйте pecl install oci8-2.2.0
При запросе введите либо значение $ORACLE_HOME
, либо
instantclient,/path/to/instant/client/lib
.
Обратите внимание: Не вводите имя переменной, такое как
$ORACLE_HOME
или $HOME
т.к. она не будет развёрнута. Вместо этого, введите полный путь. Например
/opt/oracle/product/19c/dbhome_1
или
instantclient,/Users/myname/Downloads/instantclient_19_8
.
-
Ошибка oci8_dtrace_gen.h: No such file or
directory
означает, что PHP был собран с поддержкой
DTrace Dynamic Tracing.
В таком случае устанавливайте так:
-
Добавьте в php.ini следующую строку:
Убедитесь, что oci8.so установлен в директорию,
заданную в директиве extension_dir
файла php.ini.
Установка OCI8 из PECL с помощью phpize
Если по каким-то причинам нет возможности воспользоваться командой
pecl
, можно самостоятельно загрузить пакет
с сайта » PECL.
Например oci8-3.0.0.tgz.
-
Разархивируйте пакет:
-
Подготовьте его:
-
Сконфигурируйте используя
$ORACLE_HOME
или Instant Client
or
-
Проинсталлируйте:
-
Ошибка oci8_dtrace_gen.h: No such file or
directory
означает, что PHP был собран с поддержкой
DTrace Dynamic Tracing.
В таком случае перезапустите configure
и make
, предварительно установив переменную окружения:
-
Добавьте в php.ini следующую строку:
Убедитесь, что oci8.so установлен в директорию,
заданную в директиве extension_dir
файла php.ini.
Установка OCI8 в виде подгружаемого (shared) модуля во время сборки PHP
Указание опции конфигурации shared
позволяет собрать
OCI8 в виде динамически подгружаемой библиотеки. Сборка в виде
подгружаемого модуля позволяет легко обновлять OCI8 без пересборки
всего PHP.
Соберите OCI8 с помощью одной из следующих опций.
-
При использовании бесплатных библиотек
»
Oracle Instant Client:
Если Instant Client 12.2 (или более ранний) установлен из ZIP-архива, не
забудьте в первую очередь создать
символическую ссылку на библиотеку, например, так:
ln -s libclntsh.so.12.1 libclntsh.so
.
Если Oracle Instant Client был установлен с помощью RPM, команда
конфигурации будет выглядеть так:
Например, --with-oci8=shared,instantclient,/usr/lib/oracle/19.9/client/lib
-
При использовании базы данных Oracle database или полной установке
Oracle Client:
Убедитесь, что пользователь, под которым запущен веб-сервер,
(nobody
, www
) имеет доступ
к библиотекам, файлам инициализации и
tnsnames.ora (если используется) в папке
$ORACLE_HOME
. При использовании Oracle
10gR2, может понадобиться запуск утилиты
$ORACLE_HOME/install/changePerm.sh для
получения доступа к этой папке.
После настройки следуйте обычной процедуре сборки PHP, например,
make install, после чего будет создано
подгружаемая библиотека oci8.so. Возможно, вам
потребуется вручную перенести её в папку модулей PHP, указанную
опцией extension_dir вашего
php.ini.
Для завершения установки OCI8 добавьте следующую строку в php.ini:
Установка OCI8 в виде статически скомпилированного модуля
Сборка PHP со статическим подключением OCI8, используя одну из следующих конфигурационных опций.
После настройки следуйте обычной процедуре установки PHP, например,
make install. После успешной сборки нет необходимости
добавлять oci8.so в файл php.ini.
Никаких дополнительных шагов сборки больше не требуется.
Установка OCI8 в Windows
Модуль OCI8 можно добавить в PHP с помощью библиотек из репозитория
» PECL или из
директории ext
, содержащейся в вашей инсталляции PHP.
Для библиотек Oracle 12c (и выше), раскомментируйте
соответствующую строку в php.ini: extension=php_oci8_12c.dll
,
extension=php_oci8_11g.dll
или extension=php_oci8.dll
. Единовременно можно использовать только
одну из этих библиотек. Более новые библиотеки могут содержать более продвинутый
функционал. Состав доступных библиотек может меняться в зависимости от версии PHP.
Убедитесь, что extension_dir
указывает на директорию, содержащую библиотеки модулей PHP.
При использовании Instant Client, установите системную переменную
окружения PATH на папку с библиотекой
Oracle.
Установка окружения Oracle
Перед использованием данного модуля, убедитесь, что
переменные окружения Oracle правильно настроены для пользователя,
под которым работает веб-сервер. Если ваш веб-сервер автоматически
стартует при загрузке, то убедитесь, что окружение при загрузке
также настроено корректно.
Замечание:
Не устанавливайте переменные окружения Oracle через
putenv() в PHP-скрипте, потому что библиотеки
Oracle могут быть загружены и проинициализированы до запуска
вашего скрипта. Переменные, установленные через
putenv() могут затем вызывать конфликты, падения
и прочее непредсказуемое поведение. Некоторые функции могут работать,
в то время как другие давать мелкие ошибки. Необходимо устанавливать
эти переменные до запуска веб-сервера.
В Red Hat Linux и его вариантах, экспортируйте переменные в конце файла
/etc/sysconfig/httpd. Другие системы с
Apache 2 могут использовать скрипт envvars
из папки bin в дистрибутиве Apache. Третьим вариантом
является директива Apache SetEnv
в файле
httpd.conf, на каких-то системах она может работать,
однако, известно, что на некоторых её недостаточно.
Чтобы удостовериться в корректной настройке переменных окружения,
используйте функцию phpinfo() и проверьте, что раздел
Environment (не Apache
Environment) содержит ожидаемые переменные.
Следующая таблица содержит переменные, которые могут вам потребоваться.
За подробностями обо всех доступных переменных обращайтесь к документации
Oracle.
Общие переменные окружения Oracle
Название |
Цель |
ORACLE_HOME |
Указывает на папку, с полностью установленной базой данных
Oracle. Не устанавливайте эту переменную при использовании
Oracle Instant Client, т.к. в этом нет необходимости и может
вызвать проблемы при установке. |
ORACLE_SID |
Содержит имя базы данных на локальной машине, к которой
идёт подключение. Нет необходимости устанавливать эту переменную
при использовании Oracle Instant Client, или всегда передавать
в параметрах соединения в функцию
oci_connect(). |
LD_LIBRARY_PATH |
Установите эту переменную (или её эквивалент на используемой
платформе, например,
LIBPATH
или SHLIB_PATH ) в местоположение библиотек
Oracle, например, $ORACLE_HOME/lib или
/usr/lib/oracle/18.5/client/lib. Обратите внимание,
что для ZIP архивов Instant Client в Linux более надёжно использовать
ldconfig. Обратитесь к инструкции по установке
Instant Client. Для RPM пакетов Instant Client 19 (и старше),
ldconfig , будет запущен автоматически. Кто-то использует
LD_PRELOAD вместо LD_LIBRARY_PATH .
|
NLS_LANG |
Это основная переменная, используемая для указания
кодировки и настроек глобализации в библиотеках Oracle. |
ORA_SDTZ |
Устанавливает часовой пояс сессии Oracle. |
TNS_ADMIN |
Содержит папку, в которой хранятся конфигурационные файлы
Oracle Net Services, такие как tnsnames.ora
и sqlnet.ora. В ней нет необходимости, если
строка соединения в функции oci_connect()
использует синтаксис Easy Connect, такой как, например,
localhost/XE . В ней также нет необходимости, если
сетевые конфигурационные файлы содержатся в местах хранения по умолчанию,
таких как
/usr/lib/oracle/VERSION/client/lib/network/admin,
$ORACLE_HOME/network/admin или
/etc. |
Менее используемые переменные окружения Oracle включают в себя
TWO_TASK
,
ORA_TZFILE
, а также
различные установки глобализации Oracle наподобие переменных
NLS*
и
ORA_NLS_*
.
Решение проблем
Самой частой проблемой при установке OCI8 является неправильная
установка окружения Oracle. Обычно это выражается в проблеме при
использовании функций oci_connect() или
oci_pconnect(). Ошибка может проявляться в
виде ошибок PHP, например, Call to undefined function
oci_connect(), ошибок Oracle, таких как ORA-12705,
или даже крушения Apache. Проверьте лог-файлы Apache на наличие
ошибок запуска и вышеописанные разделы для разрешения этой проблемы.
Несмотря на то, что сетевые ошибки, наподобие ORA-12154 или
ORA-12514 сигнализируют об ошибке в именовании или конфигурации сети
Oracle, реальной причиной может быть некорректно установленное
окружение PHP, из-за чего библиотеки Oracle не могут найти
конфигурационный файл tnsnames.ora.
В Windows, использование нескольких версий Oracle на одной машине
может легко вызвать их конфликты, которых можно избежать
при соблюдении особых мер предосторожности, предусматривающих, что
PHP использует корректную версию Oracle.
Утилита, помогающая определить искомые и загруженные в итоге библиотеки,
может помочь в случае проблем при отсутствующих или конфликтующих
библиотеках, особенно в Windows.
Замечание:
Если веб-сервер не стартует или падает при старте
Проверьте, что Apache собран с библиотекой pthread:
Если libpthread нет в списке, переустановите Apache:
Имейте в виду, что на некоторых системах, наподобие UnixWare,
libpthread называется libthread. Таким образом, PHP и Apache должны быть
настроены с помощью EXTRA_LIBS=-lthread.