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:
if (getenv('DEVELOP')) {
    // DEVELOP
} else {
    // Production
}

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


 
 
 

2 Kommentare zu “Webserver-Umgebung erkennen mit PHP”

  1. Daniel S
    5. Januar 2011 um 12:48

    Netter Artikel! So etwas habe ich immer gesucht. Gibt es Fälle, z.B. bei Webhostinganbietern, die den PHP-Zugriff auf die .htaccess verwehrt?

  2. neunzehn83
    5. Januar 2011 um 14:35

    Mit PHP wird auf die Webserver-Umgebung zugegriffen. Das ist immer möglich. Die Frage ist, ob man Umgebungsvariablen z.B. mit einer .htaccess setzen kann.

    Und ob das beim Webhostinganbieter funktioniert oder nicht, ist eigentlich egal. Die ENV-Variable soll ja nur in der lokalen Entwicklungsumgebung gesetzt werden. Und das sollte logischerweise immer möglich sein.

    Das Beispiel mit .htaccess ist eigentlich ein schlechtes. Besser ist es, die ENV-Variable in der httd.conf festzulegen. So ist man auf Dateiebene vollkommen unabhängig. Wird die ENV in einer .htaccess festgelegt, und der online Webspace unterstützt das Setzen von Umgebungsvariablen ebenfalls, darf man diese .htaccess-Datei nicht hochladen, da sonst auf einmal die Online-Umgebung als Develop erkannt wird.

Kommentar abgeben: