Расширения OCI8 загружаются в CLI, но не в браузере


person Blu Dragon    schedule 07.03.2011    source источник


Ответы (3)


Ре. SELinux и OCI8 при работе в качестве модуля Apache

Предлагаемое решение с http://old.nabble.com/php-with-oci8-td16460446.html

вы можете настроить свою политику, чтобы разрешить этот доступ, используя audit2allow

# grep http /var/log/audit/audit.log | audit2allow -M myhttp 
# semodule -i myhttp.pp 

Это должно позволить вам запускать эти приложения оракула с SELinux в принудительном режиме.

Об этом также есть обсуждение на форумах Oracle.

person Mark Baker    schedule 09.03.2011
comment
В руководстве по установке на php.net говорится: «Если база данных Oracle находится на том же компьютере, что и PHP, программное обеспечение базы данных уже содержит необходимые библиотеки». Однако в моем случае, когда я исключаю Oracle Instant Client, даже PHP и Oracle находятся на одном компьютере, oci8 работает только в командном режиме, но не загружается в apache. Включение клиента решает проблему для меня. - person petwho; 14.04.2014

Я нашел причину проблемы, но я не знаю, как ее решить навсегда. Судя по всему, наш тестовый сервер использует SELinux со значением «Enforce». Установка его в «Permissive» позволяет Apache/PHP запускать расширение oci8. Мой босс, однако, хочет, чтобы SELinux вернулся к «Enforce», за что я ее не виню. Я собираюсь создать исключение для Oracle/oci8.

person Blu Dragon    schedule 09.03.2011
comment
Спасибо за разъяснение проблемы здесь. Если вы найдете хорошее, постоянное решение... обязательно опубликуйте подробности для всех, кто может столкнуться с той же проблемой. - person Mark Baker; 09.03.2011

Убедитесь, что у вас есть ORACLE_HOME, ORACLE_SID и LD_LIBRARY_PATH в окружениях Apache. Помните, что Apache работает как демон, поэтому он не обязательно имеет доступ к тем же переменным среды, что и при запуске PHP-скриптов из командной строки.

ORACLE_HOME=/u01/app/oracle/product/10.1
ORACLE_SID=orcl
export ORACLE_HOME ORACLE_SID
export LD_LIBRARY_PATH=${ORACLE_HOME}/lib:${LD_LIBRARY_PATH}

В зависимости от того, где находится ваш сервер базы данных и как вы к нему подключаетесь, вы также можете установить TWO_TASK или TNS_ADMIN. Чтобы убедиться, что используется правильный набор символов, вы также можете установить NLS_LANG.

ИЗМЕНИТЬ

Обычно я собираю PHP из исходников, поэтому у меня есть полный контроль:

Предполагая, что на сервере работает стандартный клиент Oracle, мой ./configure включает:

--with-pdo-oci=$ORACLE_HOME

В нескольких случаях, когда мне нужно было создать мгновенный клиент Oracle, я использовал

--with-pdo-oci=instantclient,/usr,10.2.0.3

в моей строке ./configure

Обратите внимание, что я использую PDO_OCI, а не OCI8, но ./configure должен быть похожим

Другой шаг, который я предпринимаю при развертывании на новом сервере, заключается в том, чтобы гарантировать, что пользователь/группа apache (как определено директивами User и Group в httpd.conf... мой apache запускается как пользовательский «демон») будет читать и привилегия выполнения файлов в ORACLE_HOME

person Mark Baker    schedule 07.03.2011
comment
Спасибо. У меня был установлен LD_LIB_PATH, но не ORACLE_ vars. Я посмотрю, решит ли это проблему. - person Blu Dragon; 09.03.2011
comment
Хорошо, я установил эти переменные, но oci8 все еще не загружается в браузере. - person Blu Dragon; 09.03.2011
comment
Согласно мануалу, мне не нужны ORACLE_ vars. php.net/manual/en/oci8.installation.php - person Blu Dragon; 09.03.2011