2010-05-31 3 views
8

Ich möchte eine Umgebungsvariable in Linux an Apache beim Start übergeben.PHP und Apache Umgebungsvariablen

Export MYVAR = 5 --I meine Umgebungsvariablen in der Befehlszeile definieren

PassEnv MYVAR --set Apache die Variable in Apache-Konfigurationsdatei

apachectl restart importieren --beim I Apache neu starten Ich erhalte keine Fehlermeldung. Ich habe jedoch bemerkt, dass, wenn ich die Umgebungsvariable in meinem ersten Schritt nicht schaffen, ich eine Warnmeldung, so muss arbeiten hier

echo $ _SERVER [ ‚MYVAR‘] --i versuchen die für den Zugriff auf Umgebungsvariable innerhalb PHP, aber es ist nicht definiert

Ich habe beobachtet, dass, wenn ich PassEnv eine Umgebungsvariable versuche, die bereits beendet (eine, die ich selbst nicht erstellt habe) es funktioniert gut. Die SetEnv-Direktive funktioniert auch gut.

Ich möchte wirklich eine Umgebungsvariable zu Apache im laufenden Betrieb übergeben, ohne es in eine Datei zu schreiben. Hilfe sehr geschätzt.

Ich benutze CentOS, PHP5 und Apache2.

Danke.

Update es scheint, die Umgebungsvariable übergeben wird, wenn ich die Apache Start direkt mit httpd aufrufen und apachectl nicht das Skript ist ein Shell verwenden. Ich hätte gedacht, dass der "Export" die Variable in das Shell-Skript exportiert hätte nein? Ich bin kein Linux-Guru, also entschuldige meinen Mangel an Wissen.

Antwort

10

Wenn Sie möchten, dass die Umgebungsvariable an Apache übergeben wird, sollten Sie sicherstellen, dass die Umgebungsvariable für die Umgebung definiert ist, in der der Apache ausgeführt wird. Am einfachsten ist dazu eine Zeile export MYVAR=value zu envvars hinzuzufügen (sollte sich in/etc/apache2 befinden) oder das Skript, das Apache startet (in /etc/init.d), und fügen Sie Ihren PassEnv MYVAR dort hinzu, wo er in Ihrer Apache-Konfiguration benötigt wird.

Neustart des Apache sollte sicherstellen, dass die MYVAR-Umgebungsvariable übergeben wird. AFAIK Sie nicht in der Lage sein, den Wert dieses var zu ändern, während Apache obwohl läuft ...

Einige relevante Informationen für CentOS: http://php.dzone.com/news/inserting-variable-headers-apa&default=false&zid=159&browser=16&mid=0&refresh=0

1

oben auf wimvds' Antwort zu erweitern; Sie können Umgebungsvariablen ändern, während Apache mit dem Modul SetEnvIf ausgeführt wird. Insbesondere die SetEnvIf-Direktive dieses Moduls.

z.B.

SetEnvIf Request_URI "^.*\/foobar.*$" FOOBAR="something" 

Das obige Beispiel wird die $ FOOBAR Umgebungsvariable auf „etwas“ gesetzt, wenn die Regex entspricht die Anforderungs-URI (in diesem Fall jede URI das Wort „foobar“ enthält). Sie können dies in der Konfigurationsdatei Ihres Hosts definieren (normalerweise in /etc/apache2/sites-available/mywebsite.conf oder etwas Ähnlichem).