Wie man PHP in der Lage sein zu Lesen von Umgebungsvariablen des Systems
Ich bin mit PHP als PHP-FPM auf Centos. Ich bin versucht zu Folgen, die http://12factor.net/ Richtlinien müssen die Einstellungen werden in Umgebungsvariablen gespeichert.
Ich habe eine Datei erstellt in /etc/profile.d setzt die Umgebungsvariablen, die ich will, und die Umgebungsvariablen werden angezeigt, wenn getestet in der CLI via Bash d.h. ausführen des bash-Skript:
echo $SOME_SERVER_SETTING
zeigt die korrekte Ausgabe.
Habe ich das clear_env Einstellung auf false und variables_order auf EGPCS
jedoch die variable I gesetzt haben, die nicht zeigen, bis in PHP entweder getenv('SOME_SERVER_SETTING')
oder tun var_dump($_ENV)
Welche anderen Einstellungen muss eingestellt werden, dass PHP-FPM, alles zu empfangen, der server-Umgebungs-Variablen, und insbesondere diejenigen, die über ein shell-Skript in /etc/profile.d auf Centos?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicherheitsgründen 🙂
Sehen
/etc/php5/fpm/pool.d/www.conf
(debian Lage, möglicherweise anders auf CentOs)Getestet unter Centos 7 mit Systemd service und PHP 5.6.4
ÖFFNEN
FINDEN
ERSETZEN
ÖFFNEN
FINDEN, WENN VORHANDEN
ERSETZEN ODER HINZUFÜGEN
ÖFFNEN
HINZUFÜGEN
FÜHREN SIE IN DER SHELL FÜR DEN CHECK
FÜHREN SIE IN DER SHELL
...TESTEN
ÖFFNEN
HINZUFÜGEN
LAUFEN IM BROWSER
GENIEßEN!
Bitte Lesen Sie die environment-Variablen aus den richtigen Standort. PHP erstellt eine super-Globale variable:
$_ENV
So können Sie den Zugriff auf eine einzelne variable durch den Zugriff auf ein bestimmtes element, die variable, die enthält ein array:echo $_ENV['SOME_SERVER_SETTING'];
Ich habe keine Ahnung, warum dein Beispiel oben sollte auf dem CLI. Der super-globalen variable ist die Lage dokumentiert und funktioniert.
Was könnte dein Problem hier ist, dass die Variablen nicht gesetzt sind für die http-server-Prozess. In der Regel Skripte, wie Sie in
/etc/profile.d
sind ausgeführt bei der Anmeldung. Also, wenn ein Benutzer erstellt eine Sitzung innerhalb des Systems. Aber das wird nie passieren, dass ein http-server gestartet ist als system-server. Kein login erfolgt, kein Profil Skript ausgeführt wird, keine Umgebungsvariablen festgelegt sind.Um dieses Problem zu lösen Sie können
.htaccess
style-DateienVariablen in der FastCGI-setup festgelegt werden, die als input durch den client der FPM Prozess, zum Beispiel NginX. Sie werden per Header an den FastCGI server, interpretiert Sie und setzt Sie entsprechend für das Auslesen mit getenv.
Wenn Sie sind in der Tat mit NginX, sich für die fastcgi_param Richtlinien. Sie können auch Umgebungsvariablen in deiner pool config von php5-fpm, die vom Anwendungsfall abhängig sind.