Як можна встановити PATHзмінну середовища для Apache2? Я намагався встановити його в /usr/sbin/envvarshttpd.conf і SetEnv PATH(і передати його до SSI разом із PassEnv), але він просто не переймається.
Як можна встановити PATHзмінну середовища для Apache2? Я намагався встановити його в /usr/sbin/envvarshttpd.conf і SetEnv PATH(і передати його до SSI разом із PassEnv), але він просто не переймається.
Відповіді:
Як говорили інші, ви робите це за допомогою файлу змінної середовища. Я надам більш детальну інформацію у цій відповіді та покажу доказ того, що вона працює.
Цей файл змінної середовища повинен бути джерелом apachectl. У вікні Ubuntu цей файл знаходиться в /etc/apache2/envvars. На RedHat, це на /etc/sysconfig/httpd. У FreeBSD це встановлено /etc/rc.conf(я думаю). Як альтернативу, ви також можете встановити цю інформацію в сценарії запуску ( /etc/init.d/httpdабо apachectlтощо). Однак я думаю, що найкраще залишати сценарії запуску в спокої, якщо це можливо. Найкраще місце займає призначений сценарій змінних середовища.
Перевірте розташування цього файлу envvars. У Ubuntu /etc/init.d/apache2ctlпоказує, що він джерело /etc/apache2/envvars:
# the path to the environment variable file
test -z "$APACHE_ENVVARS" && APACHE_ENVVARS='/etc/apache2/envvars'
# pick up any necessary environment variables
if test -f $APACHE_ENVVARS; then
. $APACHE_ENVVARS
fi
Для перегляду змінних я використовую скрипт Perl printenv.cgi та надав його на веб-сторінці http://example.org/cgi-bin/printenv.cgi . Сценарій показує мені наступний ПАТ:
PATH = /usr/local/bin:/usr/bin:/bin
Щоб змінити ці змінні, я редагую файл envvars:
$ sudo vim /etc/apache2/envvars
Змініть свій PATH у цьому файлі. У цьому прикладі я додаю /opt/local/binсвій ПАТ. У деяких випадках може знадобитися використання, export PATHа не тільки PATH:
export PATH=$PATH:/opt/local/bin
Перезапустіть апаш
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ...done.
$
Перегляньте результати на http://example.org/cgi-bin/printenv.cgi , які тепер показують, що PATH тепер містить новий елемент:
PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
Якщо вищезазначене не працює, може статися щось незвичне. Можливо, ваш сценарій ігнорує або перезаписує PATH.
graceful, і це не спричинило зміни.
2.2. Змінна середовища PATH не може бути встановлена за допомогою Setenv.
У моїй системі це /etc/apache2/envvars.
PATH
Ви можете встановити його у start()функції сценарію init, приблизно так:
start() {
echo -n $"Starting $prog: "
check13 || exit 1
export PATH=${PATH}:/var/ossec/bin
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch ${lockfile}
return $RETVAL
}
Створіть сценарій Perl, щоб перелічити всі змінні середовища:
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>";
}
Помістіть його /var/www/cgi-binі перевірте http://domain.com/cgi-bin/env.cgi, ви побачите нижче:
PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin
На RedHat з Apache 2.4.x, зібраний з джерела з --prefix=/usr --enable-layout=RedHatфайлом envvars, розташований на /usr/sbin/envvars. Я можу підтвердити, що встановлення відповідного PATH у цьому файлі робить його таким, що Apache та PHP знають про це.
Я використовував той самий підхід, що і Стефан Ласєвський, щоб визначити це. Для Apache 2.4.12 , то /usr/sbin/envvarsфайл використовується в рядку 49 /usr/sbin/apachectl.
/usr/sbin/apachectlзгадується /etc/sysconfig/httpd, що містить: «Цей файл більше не використовується для налаштування додаткових змінних середовища для процесу httpd. Його замінили systemd. » paste.debian.net/361218
Відредагуйте файл плістів Apache2 будь-яким редактором (наприклад, використовуючи vim):
$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist
Додайте до файлу plist:
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
Якщо EnvironmentVariablesключ вже існує, просто додайте
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
до <dict>
Примітка. Для Mac OSX 10.11 (EL Capitan) або вище вам потрібно запустити команду csrutil disable в терміналі після перезавантаження та натискання CMD + R, і тоді ви зможете редагувати цей файл.
Перезапустіть Apache2
$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start
У моїй системі Apache2 я виявив, що багато відвідувачів хотіли розграбувати мою ретельно складену колекцію Smileys / смайликів (серйозно!), Тож я вирішив використати випадково генерований симпосилання на шлях до каталогу, який буде вибрано як Змінна Apache2, і ділитися посиланнями було практично неможливо.
Отже, кожні 30 хвилин, cron запускав сценарій perl, який переписав би файл .htaccess і включив SetEnv, як ви бачите нижче:
....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"
Потім у верхній частині моїх сторінок PHP я прочитав подібну змінну, а пізніше на сторінці з’явиться та змінна, яка використовується для побудови шляху до придатного смайлика:
$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';
Працює для мене, і сподіваюся, це допоможе тобі!
PATH