Wie können Sie die PATHUmgebungsvariable für Apache2 festlegen ? Ich habe versucht, es in /usr/sbin/envvarsund in httpd.conf mit zu setzen SetEnv PATH(und es mit PassEnv an SSI weiterzugeben), aber es wird einfach nicht mitgerissen.
Wie können Sie die PATHUmgebungsvariable für Apache2 festlegen ? Ich habe versucht, es in /usr/sbin/envvarsund in httpd.conf mit zu setzen SetEnv PATH(und es mit PassEnv an SSI weiterzugeben), aber es wird einfach nicht mitgerissen.
Antworten:
Wie bereits erwähnt, verwenden Sie dazu eine Umgebungsvariablendatei. Ich werde in dieser Antwort weitere Details angeben und den Beweis erbringen, dass es funktioniert.
Diese Umgebungsvariablendatei muss aus einer Quelle stammen apachectl. Auf meiner Ubuntu-Box befindet sich diese Datei unter /etc/apache2/envvars. Auf RedHat ist dies um /etc/sysconfig/httpd. Auf FreeBSD ist dies eingestellt /etc/rc.conf(glaube ich). Alternativ können Sie diese Informationen auch in einem Startskript ( /etc/init.d/httpdoder apachectlusw.) festlegen . Ich halte es jedoch für das Beste, die Startskripte nach Möglichkeit in Ruhe zu lassen. Der beste Platz ist das angegebene Umgebungsvariablenskript.
Überprüfen Sie den Speicherort dieser Envvars-Datei. /etc/init.d/apache2ctlZeigt unter Ubuntu, dass es folgende Quellen enthält /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
Zum Anzeigen der Variablen verwende ich ein Perl-Skript printenv.cgi und stelle es unter http://example.org/cgi-bin/printenv.cgi zur Verfügung . Das Skript zeigt mir den folgenden Pfad:
PATH = /usr/local/bin:/usr/bin:/bin
Um diese Variablen zu ändern, bearbeite ich die envvars-Datei:
$ sudo vim /etc/apache2/envvars
Ändern Sie Ihren Pfad in dieser Datei. In diesem Beispiel werde ich /opt/local/binan meinen PATH anhängen . In einigen Fällen müssen Sie möglicherweise export PATHnicht nur Folgendes verwenden PATH:
export PATH=$PATH:/opt/local/bin
Starten Sie Apache neu
$ sudo service apache2 restart
* Restarting web server apache2
... waiting ...done.
$
Sehen Sie sich die Ergebnisse auf http://example.org/cgi-bin/printenv.cgi an , die nun zeigen, dass der PATH jetzt ein neues Element enthält:
PATH = /usr/local/bin:/usr/bin:/bin:/opt/local/bin
Wenn dies nicht funktioniert, kann etwas Ungewöhnliches passieren. Möglicherweise ignoriert oder überschreibt Ihr Skript den PATH.
graceful, httpd zu verwenden. Dadurch wurden die Änderungen nicht wirksam.
In Version 2.2 kann die Umgebungsvariable PATH nicht mit Setenv festgelegt werden.
Auf meinem System ist es /etc/apache2/envvars.
PATH
Stellen Sie sicher, dass Sie mod_env geladen haben.
Die korrekte Syntax lautet (Beispiel):
SetEnv LD_LIBRARY_PATH /usr/local/lib
Das hat bei mir funktioniert.
PATH
Sie können es in der start()Funktion des Init-Skripts wie folgt einstellen :
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
}
Erstellen Sie ein Perl-Skript, um alle Umgebungsvariablen aufzulisten:
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>";
}
Legen Sie es in /var/www/cgi-binund überprüfen http://domain.com/cgi-bin/env.cgiSie , ob Sie die folgenden Punkte sehen:
PATH = /sbin:/usr/sbin:/bin:/usr/bin:/var/ossec/bin
Unter RedHat mit Apache 2.4.x befindet sich die aus dem Quellcode kompilierte --prefix=/usr --enable-layout=RedHatenvvars-Datei unter /usr/sbin/envvars. Ich kann bestätigen, dass die Einstellung des entsprechenden PFADS in dieser Datei dazu führt, dass Apache und PHP davon Kenntnis haben.
Ich habe den gleichen Ansatz wie Stefan Lasiewski gewählt, um das herauszufinden. Für Apache 2.4.12 befindet sich die /usr/sbin/envvarsDatei in Zeile 49 von /usr/sbin/apachectl.
/usr/sbin/apachectlerwähnt /etc/sysconfig/httpd: «Diese Datei wird nicht mehr zum Konfigurieren zusätzlicher Umgebungsvariablen für den httpd-Prozess verwendet. Es wurde durch systemd ersetzt. » Paste.debian.net/361218
Bearbeiten Sie die Apache2-Plist-Datei mit einem beliebigen Editor (Beispiel mit vim):
$ sudo vim /System/Library/LaunchDaemons/org.apache.httpd.plist
Fügen Sie der plist-Datei Folgendes hinzu:
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
Wenn der EnvironmentVariablesSchlüssel bereits vorhanden ist, fügen Sie ihn einfach hinzu
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
zum <dict>
NB: Für Mac OS X 10.11 (EL Capitan) oder höher müssen Sie den Befehl csrutil disableim Terminal ausführen, nachdem Sie CMD + R neu gestartet und gedrückt haben. Anschließend können Sie diese Datei bearbeiten.
Starten Sie Apache2 neu
$ sudo /usr/sbin/apachectl stop
$ sudo /usr/sbin/apachectl start
Auf meinem Apache2-System stellte ich fest, dass viele Besucher nur meine sorgfältig zusammengestellte Sammlung von Smileys / Emoticons plündern wollten (im Ernst!), Also entschied ich mich, einen zufällig generierten Symlink zu dem Verzeichnispfad zu verwenden, der als aufgenommen wird Apache2-Variable, und es war praktisch unmöglich, Links zu teilen.
Daher führte cron alle 30 Minuten ein Perl-Skript aus, das die .htaccess-Datei neu schrieb und ein SetEnv enthielt, wie Sie unten sehen können:
....
SetEnv SMILEYDIR "QyQGTZ8cgcK3zMVL0aNJ"
Oben auf meinen PHP-Seiten habe ich die Variable dann so gelesen, und später auf der Seite wurde diese Variable verwendet, um einen Pfad zum entsprechenden Smiley zu erstellen:
$SMILEYDIR = apache_getenv("SMILEYDIR");
....
....
echo '<img src="/'.$SMILEYDIR.'//SMILEY_yay!.gif" border="0" hspace="3">';
Funktioniert für mich und hoffe es hilft dir!
PATH