Хорошо, поэтому у меня есть эта ужасная проблема с oci, apache, php и suse. Прежде всего, версии:
PHP 5.3.15 (cli) Apache/2.2.22 (Linux/SUSE) OCI8 1.4.9 SUSE 12.2 32 bit Oracle client 10.2.0.4
У меня действительно простой файл php:
<?php error_reporting(E_ALL); ini_set('display_errors', '1'); oci_connect('user', 'passwd', 'host/sid'); ?>
Когда я запускаю его из командной строки, он выполняет штраф:
machine:~ # php oci.php machine:~ #
Но когда я запускаю его в браузере, он дает мне:
Warning: oci_connect() [function.oci-connect]: OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME and LD_LIBRARY_PATH are set and point to the right directories
Я уже давно борюсь с этой проблемой, и я уверен, что моя конфигурация Apache правильная.
Я экспортирую все необходимые переменные перед запуском любого процесса apache – я добавил
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/oracle/home/lib; export LD_LIBRARY_PATH ORACLE_HOME=/path/to/oracle/home; export ORACLE_HOME TNS_ADMIN=/path/to/oracle/home/network/admin; export TNS_ADMIN NLS_LANG=POLISH_POLAND.EE8MSWIN1250; export NLS_LANG
в начале сценария /etc/init.d/apache2
(я запускаю apache с помощью /etc/init.d/apache2 start
).
Apache работает от пользователя wwwrun
, который находится в oinstall
и dba
:
machine:~ # cat /etc/apache2/uid.conf User wwwrun Group www machine:~ # id wwwrun uid=30(wwwrun) gid=8(www) groups=8(www),113(oinstall),114(dba) machine:~ # l $ORACLE_HOME total 216 drwxr-xr-x 48 oracle oinstall 4096 Jan 25 17:07 ./ drwxrwxr-x 3 oracle oinstall 4096 Jan 25 17:01 ../ ... machine:~ #
У меня нет каких-либо переменных Environment
разделе Environment
в phpinfo();
выход – это может быть проблемой? Если да, как я могу это исправить? Это какая-то проблема безопасности? Я читал о таких проблемах, когда SELinux включен, но у меня его нет, мой брандмауэр выключен.
Любая помощь будет принята с благодарностью!
Задача решена! Благодаря этим инструкциям ( настройка среды Oracle ) и ответ ken_yap на этот поток.
Чтобы поместить переменные в раздел « Среда» Apache, вам просто нужно добавить их в файл /etc/sysconfig/apache2
: LD_LIBRARY_PATH=/path/to/oracle/lib
.
Другим решением (которому не нужен root-доступ) является добавление этих строк на страницу php:
putenv("ORACLE_HOME=/opt/app/oracle/product/11.2.0/db_1"); putenv("LD_LIBRARY_PATH=/opt/app/oracle/product/11.2.0/db_1/lib:/lib:/usr/lib");
С уважением