Wie können Sie die PATH
Umgebungsvariable für Apache2 festlegen ? Ich habe versucht, es in /usr/sbin/envvars
und in httpd.conf mit zu setzen SetEnv PATH
(und es mit PassEnv an SSI weiterzugeben), aber es wird einfach nicht mitgerissen.
apache-2.2
Matteo
quelle
quelle
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/httpd
oderapachectl
usw.) 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/apache2ctl
Zeigt unter Ubuntu, dass es folgende Quellen enthält/etc/apache2/envvars
: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:
Um diese Variablen zu ändern, bearbeite ich die envvars-Datei:
Ändern Sie Ihren Pfad in dieser Datei. In diesem Beispiel werde ich
/opt/local/bin
an meinen PATH anhängen . In einigen Fällen müssen Sie möglicherweiseexport PATH
nicht nur Folgendes verwendenPATH
:Starten Sie Apache neu
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:
Wenn dies nicht funktioniert, kann etwas Ungewöhnliches passieren. Möglicherweise ignoriert oder überschreibt Ihr Skript den PATH.
quelle
graceful
, httpd zu verwenden. Dadurch wurden die Änderungen nicht wirksam.http://httpd.apache.org/docs/2.2/mod/mod_env.html#setenv
quelle
Auf meinem System ist es
/etc/apache2/envvars
.quelle
PATH
Stellen Sie sicher, dass Sie mod_env geladen haben.
Die korrekte Syntax lautet (Beispiel):
Das hat bei mir funktioniert.
quelle
PATH
Sie können es in der
start()
Funktion des Init-Skripts wie folgt einstellen :Erstellen Sie ein Perl-Skript, um alle Umgebungsvariablen aufzulisten:
Legen Sie es in
/var/www/cgi-bin
und überprüfenhttp://domain.com/cgi-bin/env.cgi
Sie , ob Sie die folgenden Punkte sehen:quelle
Unter RedHat mit Apache 2.4.x befindet sich die aus dem Quellcode kompilierte
--prefix=/usr --enable-layout=RedHat
envvars-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/envvars
Datei in Zeile 49 von/usr/sbin/apachectl
.quelle
/usr/sbin/apachectl
erwä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/361218Bearbeiten Sie die Apache2-Plist-Datei mit einem beliebigen Editor (Beispiel mit vim):
Fügen Sie der plist-Datei Folgendes hinzu:
Wenn der
EnvironmentVariables
Schlüssel bereits vorhanden ist, fügen Sie ihn einfach hinzuzum
<dict>
NB: Für Mac OS X 10.11 (EL Capitan) oder höher müssen Sie den Befehl
csrutil disable
im 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
quelle
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:
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:
Funktioniert für mich und hoffe es hilft dir!
quelle
PATH