apache+oracle 9i+NLS возникла хитрая проблема

hell

Guest
apache+oracle 9i+NLS возникла хитрая проблема

Вообщем произошла странная ситуация.

Недавно вдруг все скрипты начали отдавать данные в koi8r. Быстрая проверка показала, что в Apache Environment NLS_LANG стоит в american_america.CL8MSWIN1251, а в Enviroment - american_america.CL8KOI8
. При этом файлы конфигурации php, bash и php-скрипты не изменялись с января 2005 года. Конфиг апача меняли недавно. Работать перестало вчера. Долго разбираться не стали, просто поменяли в .bash_profile koi8 на mswin1251, всё заработало, но в связи с этим вопрос. Как oracle клиент определяет, какую переменную env ему брать, апача или env внешний? php - модулем.


зы:
bash-2.05$ uname -a
SunOS www 5.9 Generic_112234-03 i86pc i386 i86pc

PHP Version => 4.3.11-dev
System => SunOS www 5.9 Generic_112234-03 i86pc
Build Date => Jan 17 2005 20:00:00
Configure Command => './configure' '--with-oci8' '--with-apxs2=/usr/local/apache2/bin/apxs'
 

tony2001

TeaM PHPClub
>в Apache Environment NLS_LANG стоит в american_america.CL8MSWIN1251
где конкретно было прописано?
(и зачем? если прописано то же в профайле.)
 

hell

Guest
tony2001, "так уж исторически сложилось".

прописано в httpd.conf перед описанием виртуал хостов:

SetEnv ORACLE_HOME /home/oracle8/app/oracle/product/8.0.5
SetEnv NLS_LANG american_america.CL8MSWIN1251
SetEnv LD_LIBRARY_PATH /home/oracle8/app/oracle/product/8.0.5/lib


просто .bash_profile для юзера апача не менялся с Jan 2004, и при этом все работало :) Понятно, что теперь этот SetEnv - бессполезен....
 

tony2001

TeaM PHPClub
насколько я понимаю, процесс такой:
апач устанавливает переменную через SetEnv, рожает чайлда, который переходит под юзера apache (условно) и подбирает его переменные среды.
в результате - переменная из .profile перекрывает значение SetEnv.

вообще, в двух местах назначать бессмысленно.
 

hell

Guest
Я вот теперь совсем не уверен, что SetEnv что-то делает для чайлда:

http://httpd.apache.org/docs/mod/mod_env.html

Sets an environment variable, which is then passed on to CGI scripts and SSI pages.

Тогда я вообще не понимаю, как у меня работали полгода скрипты :)
 

hell

Guest
tony2001, при fork по идее весь ENV родителя наследуется тем, кого форкнули, т.к. форкнутый процесс - полная копия родителя. А при CGI - делается ведь наверняка exec shell-a. А значит, в первом случае у потомка будет тот ENV, при котором был запущен самый первый процесс апача. А во втором - не факт, потому apache наверно в параметрах exec указывает эти SetEnv переменные.

Ладно, замнем до нового проявления бага :)
 
Сверху