Как вы можете установить PATHпеременную окружения для Apache2? Я попытался установить его /usr/sbin/envvarsи в httpd.conf с SetEnv PATH(и передать его SSI с PassEnv), но он просто не переносится.
Как вы можете установить PATHпеременную окружения для Apache2? Я попытался установить его /usr/sbin/envvarsи в httpd.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
Измените ваш путь в этом файле. В этом примере я добавлю /opt/local/binсвой PATH. В некоторых случаях вам может понадобиться использовать, export PATHа не только PATH:
export PATH=$PATH:/opt/local/bin
Перезапустите Apache
$ 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()функции сценария инициализации, примерно так:
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
Отредактируйте plist-файл 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 я обнаружил, что многие посетители хотели только разграбить мою тщательно скомпилированную коллекцию смайлов / смайликов (серьезно!), Поэтому я решил использовать случайно сгенерированную символическую ссылку на путь к каталогу, которая будет выбрана как Переменная 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