Jak ustawić PATHzmienną środowiskową dla Apache2? Próbowałem ustawić go w /usr/sbin/envvarshttpd.conf za pomocą SetEnv PATH(i przekazać go do SSI za pomocą PassEnv), ale po prostu się nie da.
Jak ustawić PATHzmienną środowiskową dla Apache2? Próbowałem ustawić go w /usr/sbin/envvarshttpd.conf za pomocą SetEnv PATH(i przekazać go do SSI za pomocą PassEnv), ale po prostu się nie da.
Odpowiedzi:
Jak powiedzieli inni, robisz to za pomocą pliku zmiennej środowiskowej. Podam więcej szczegółów w tej odpowiedzi i pokażę dowód, że to działa.
Ten plik zmiennych środowiskowych musi pochodzić z apachectl. Na moim polu Ubuntu ten plik znajduje się pod adresem /etc/apache2/envvars. Na RedHat jest to /etc/sysconfig/httpd. W FreeBSD jest to ustawione /etc/rc.conf(myślę). Alternatywnie możesz ustawić te informacje w skrypcie startowym ( /etc/init.d/httpdlub apachectlitp.). Myślę jednak, że najlepiej pozostawić skrypty startowe w spokoju, jeśli to możliwe. Najlepsze miejsce znajduje się w wyznaczonym skrypcie zmiennych środowiskowych.
Sprawdź lokalizację tego pliku envvars. Na Ubuntu /etc/init.d/apache2ctlpokazuje, że źródło /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
Aby wyświetlić zmienne, używam skryptu printenv.cgi Perla i udostępniłem go na stronie http://example.org/cgi-bin/printenv.cgi . Skrypt pokazuje mi następującą ŚCIEŻKĘ:
PATH = /usr/local/bin:/usr/bin:/bin
Aby zmienić te zmienne, edytuję plik envvars:
$ sudo vim /etc/apache2/envvars
Zmodyfikuj ŚCIEŻKĘ w tym pliku. W tym przykładzie dołączę /opt/local/bindo mojej ŚCIEŻKI. W niektórych przypadkach może być konieczne użycie, export PATHa nie tylko PATH:
export PATH=$PATH:/opt/local/bin
Uruchom ponownie apache
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ...done.
$
Zobacz wyniki na http://example.org/cgi-bin/printenv.cgi , które pokazują, że ŚCIEŻKA zawiera teraz nowy element:
PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
Jeśli powyższe nie działa, może się dziać coś niezwykłego. Być może twój skrypt ignoruje lub zastępuje ŚCIEŻKĘ.
graceful, i które nie powodują zmiany odniosły skutek.
W wersji 2.2 zmiennej środowiskowej PATH nie można ustawić za pomocą Setenv.
W moim systemie to /etc/apache2/envvars.
PATH
Możesz ustawić to w start()funkcji skryptu inicjującego, coś takiego:
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
}
Utwórz skrypt Perla, aby wyświetlić wszystkie zmienne środowiskowe:
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>";
}
Umieść go /var/www/cgi-bini sprawdź http://domain.com/cgi-bin/env.cgi, a zobaczysz poniżej:
PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin
Na RedHat z Apache 2.4.x skompilowanym ze źródła z --prefix=/usr --enable-layout=RedHatplikiem envvars znajduje się na /usr/sbin/envvars. Mogę potwierdzić, że ustawienie odpowiedniej ŚCIEŻKI w tym pliku powoduje, że Apache i PHP są tego świadomi.
Zastosowałem to samo podejście, co Stefan Lasiewski, aby to ustalić. Dla Apache 2.4.12 The /usr/sbin/envvarsplik pochodzi on line 49 /usr/sbin/apachectl.
/usr/sbin/apachectlwspomina /etc/sysconfig/httpd, który zawiera: «Ten plik nie jest już używany do konfigurowania dodatkowych zmiennych środowiskowych dla procesu httpd. Został zastąpiony przez systemd. » paste.debian.net/361218
Edytuj plik Plist Apache2 za pomocą dowolnego edytora, który ci się podoba (na przykład za pomocą vima):
$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist
Dodaj następujące pliki do pliku plist:
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
Jeśli EnvironmentVariablesklucz już istnieje, po prostu dodaj
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
do <dict>
Uwaga: w przypadku systemu Mac OSX 10.11 (EL Capitan) lub nowszego należy uruchomić polecenie csrutil disablew terminalu po ponownym uruchomieniu i naciśnięciu CMD + R, a następnie będzie można edytować ten plik.
Uruchom ponownie Apache2
$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start
W moim systemie Apache2 odkryłem, że wielu odwiedzających chce jedynie splądrować moją starannie skompilowaną kolekcję emotikonów / emotikonów (poważnie!), Więc zdecydowałem się użyć losowo wygenerowanego dowiązania symbolicznego do ścieżki katalogu, która byłaby wybrana jako Zmienna Apache2 i dzielenie się linkami było praktycznie niemożliwe.
Co 30 minut cron uruchamiał skrypt Perla, który przepisałby plik .htaccess i zawierał SetEnv, jak widać poniżej:
....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"
Następnie na górze moich stron PHP czytałem zmienną w ten sposób, a później na stronie znajdowała się zmienna używana do budowania ścieżki do odpowiedniej buźki:
$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';
Działa dla mnie i mam nadzieję, że ci to pomoże!
PATH