Установка
Складання PHP спільно з OCI8
Перед збиранням OCI8 вивчіть попередній розділ "Вимоги".
Перед початком веб-сервера, OCI8 зазвичай потрібно кілька змінних оточення Oracle (див. нижче) для виявлення бібліотек, конфігураційних файлів та встановлення деяких базових властивостей, таких як кодування, використовуване бібліотеками Oracle. Ці змінні мають бути встановлені перед запуск будь-якого PHP-процесу.
Бінарний файл PHP повинен використовувати ту ж чи більш свіжу основну версію бібліотек Oracle, ніж ту, з якою він був зібраний. Наприклад, якщо ви зібрали OCI8 з бібліотеками Oracle 19, PHP також повинен працювати з бібліотеками Oracle 19. Програми PHP можуть підключатися до інших версій Oracle Database, оскільки Oracle має клієнт-серверну сумісність різних версій.
Установка OCI8 із PECL
Модуль OCI8 може бути включений до поточної установки PHP як автоматично, так і вручну за допомогою » PECL
-
Якщо комп'ютер знаходиться за фаєрволом, встановіть проксі для PEAR, наприклад:
pear config-set http_proxy http://my-proxy.example.com:80/
-
Запустіть
pecl install oci8
Для 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. У такому разі встановлюйте так:$ export PHP_DTRACE=yes $ pecl install oci8
-
Додайте до php.ini наступний рядок:
extension=oci8.so
Переконайтеся, що oci8.so встановлений у директорію, задану у директивіextension_dirфайла php.ini.
Установка OCI8 із PECL за допомогою phpize
Якщо з якихось причин немає можливості скористатися командою pecl
, можна самостійно завантажити пакет із сайту » PECLНаПриклад oci8-3.0.0.tgz.
-
Розархівуйте пакет:
tar -zxf oci8-3.0.0.tgz cd oci8-3.0.0
-
Підготуйте його:
phpize
-
Налаштуйте використовуючи
$ORACLE_HOME
або Instant Client./configure -with-oci8=shared,$ORACLE_HOME
or
./configure -with-oci8=shared,instantclient,/path/to/instant/client/lib
-
Проінсталюйте:
make install
-
Ошибка
oci8_dtrace_gen.h: No such file or directory
означає, що PHP було зібрано з підтримкоюDTrace Dynamic Tracing. У такому разі перезапустітьconfigure
иmake
, попередньо встановивши змінну оточення:$ export PHP_DTRACE=yes
-
Додайте до php.ini наступний рядок:
extension=oci8.so
Переконайтеся, що oci8.so встановлений у директорію, задану у директивіextension_dirфайла php.ini.
Установка OCI8 у вигляді підвантажуваного (shared) модуля під час складання PHP
Указание опции конфигурацииshared
дозволяє зібрати OCI8 у вигляді бібліотеки, що динамічно підвантажується. Складання у вигляді модуля, що підвантажується, дозволяє легко оновлювати OCI8 без перескладання всього PHP.
Зберіть OCI8 за допомогою однієї з наведених нижче опцій.
-
При використанні безкоштовних бібліотек» Oracle Instant Client :
./configure --with-oci8=shared,instantclient,/шлях/до/instant/client/lib
Якщо Instant Client 12.2 (або раніше) встановлено з ZIP-архіву, не забудьте в першу чергу створити символічне посилання на бібліотеку, наприклад:
ln -s libclntsh.so.12.1 libclntsh.so
Якщо Oracle Instant Client було встановлено за допомогою RPM, команда конфігурації виглядатиме так:
./configure --with-oci8=shared,instantclient,/usr/lib/oracle/<version>/client/lib
НаПриклад,--with-oci8=shared,instantclient,/usr/lib/oracle/19.9/client/lib
-
При використанні бази даних Oracle database або повної установки Oracle Client:
./configure --with-oci8=shared,$ORACLE_HOME
Переконайтеся, що користувач, під яким запущено веб-сервер, (
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:
extension=oci8.so
Установка OCI8 у вигляді статично скомпільованого модуля
Складання PHP зі статичним підключенням OCI8, використовуючи одну з наступних конфігураційних опцій.
-
При використанні Oracle Instant Client:
./configure --with-oci8=instantclient,/шлях/до/instant/client/lib
-
У разі використання бази даних Oracle або повної установки Oracle Client:
./configure --with-oci8=$ORACLE_HOME
Після налаштування дотримуйтесь звичайної процедури встановлення 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:
# ldd /www/apache/bin/httpd libpthread.so.0 => /lib/libpthread.so.0 (0x4001c000) libm.so.6 => /lib/libm.so.6 (0x4002f000) libcrypt.so.1 => /lib/libcrypt.so.1 (0x4004c000) libdl.so.2 => /lib/libdl.so.2 (0x4007a000) libc.so.6 => /lib/libc.so.6 (0x4007e000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Якщо libpthread немає у списку, переустановіть Apache:
# cd /usr/src/apache_1.3.xx # make clean # LIBS=-lpthread ./config.status # make # make install
Майте на увазі, що на деяких системах, на зразок UnixWare, libpthread називається libthread. Таким чином, PHP та Apache повинні бути налаштовані за допомогою EXTRA_LIBS=-lthread.