Расширения OCI8 загружаются в CLI, но не в браузер - PullRequest
2 голосов
/ 08 марта 2011

У нас почти такая же проблема, как у этого человека:

Функции OCI8 не найдены при запуске apache с php5

Разница между их проблемой и нашей заключается в том, что у нас есть только один php.ini (/etc/php.ini). Мы запускаем PHP 5.3.5 с Apache 2.2.3 на CentOS 5.5. Как вы можете видеть, на их вопрос так и не был дан ответ, но я надеюсь, что вы все поможете с нашим. Спасибо!

Ответы [ 3 ]

2 голосов
/ 09 марта 2011

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

1 голос
/ 09 марта 2011

Re.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 также есть ветка

0 голосов
/ 08 марта 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 работает как пользователь "daemon") будет читать и выполнятьпривилегия для файлов в разделе ORACLE_HOME

...