neunzehn83.de

Ein Mann, ein Blog, kein Plan.

Webserver-Umgebung erkennen mit PHP

Development oder Production - das ist hier die Frage. Bei der Webseiten-Entwicklung bietet es sich selbst bei kleinsten Projekten an, zunächst in einer lokalen Entwicklungsumgebung die Anwendung zu testen. Ist der Test erfolgreich werden die Änderungen online gestellt.

Oftmals unterscheidet sich die Produktivumgebung im Internet von der lokalen. So müssen z.B. unterschiedliche MySQL-Konfigurationen  oder Pfade berücksichtigt werden.

Doch wie kann man zwischen den verschiedenen Umgebungen in einem PHP-Skript automatisch unterscheiden? Schließlich wollen wir ja nicht vor jedem Upload die Konfiguration händisch anpassen.

Das Auslesen des Server-Namens per $_SERVER['HTTP_HOST'] scheint die einfachste Möglichkeit. Doch da DNS-Namen und IP-Adressen, speziell in Entwicklungsumgebungen, vergänglich sind, ist das nicht immer die sicherste Methode seinen Entwicklungsserver zu identifizieren.

Besser ist es, in der lokalen Webserver-Konfiguration eine Umgebungsvariable zu setzen und diese dann per PHP abzufragen. Im Falle eines Apache-Webservers mit mod_env wäre das setEnv in der conf (httpd.conf), in einer VHOST-Direktive oder per .htaccess. Beispiel .htaccess:

SetEnv DEVELOP true

Auslesen mit PHP:

#!php@1 
if (getenv('DEVELOP')) {
    // DEVELOP
} else {
    // Production
}

Unter manchen Konfigurationen sind die Umgebungsvariablen nur in $_SERVER verfügbar und nicht per getenv (IIS z.B.)

Geschrieben am Mittwoch, 25. August 2010 und abgelegt unter Webtechnik.