Localhost Ergänzung für PHP (Providerwechsel)

Localhost ⇔ Webspace leicht gemacht

Man kann sich die andauernde Abfrage, ob die Seite auf Localhost oder Webspace läuft schon vereinfachen. Nach einigen Versuchen, habe ich das ja schon im Artikel Localhost Ergänzung für Windows 7 dargestellt. Nun kann sich aber bei einem Providerwechsel nicht nur die Globale Variable $_SERVER im Inhalt ändern, sondern auch die Verzeichnisse des Webspaces. Wie kann man sich hier einfach behelfen?

Konstante IS_LOCAL

Solange man bei einem Provider ist, wird sich an dem Verzeichnis indem die php-Dateien der Seiten liegen, wohl kaum was ändern. Man muss aber bei jedem neuen Skript immer die gleiche Abfrage auf dieses Verzeichnis angeben, um eine boolesche Konstante IS_LOCAL zu definieren. D.h. ändert der Provider den Inhalt der $_SERVER, so muss man alle PHP-Skripte anpassen.

Was aber, wenn man ein eigenes Include für diese Abfrage erstellt und in ein gesondertes Verzeichnis stellt? Dann muss man nur einmal dieses Skripte ändern. Die Idee ist: Zentral in einem sog. COMMON-Verzeichnis, ein PHP-Skript abzulegen, auf das sich alle anderen Skripte beziehen. Nennen wir das Verzeichnis COMMON und legen es in unserem Webspace außerhalb aller „Start-Verzeichnisse“ ab. Dann könnte ein solches Skript wie folgt aussehen:

//=============================================================
// file: PROVIDERINFO.php
// check, ob localhost oder Webspace !
//=============================================================
define("WEBSPACE_ROOT_PATH","/is/htdocs"); // immer ändern, wenn anderer Provider !!!!
if (substr($_SERVER["DOCUMENT_ROOT"],0,10) <> WEBSPACE_ROOT_PATH ) define("IS_LOCAL",TRUE);
else define("IS_LOCAL",FALSE);

Jetzt hat man eine Konstante IS_LOCAL die entweder TRUE oder FALSE ist. Man könnte diese Vorgehensweise auch „redundanzfreie Programmierung“ nennen. 🙂

Alles schön und gut, aber die Variable $_SERVER["DOCUMENT_ROOT"] ist nicht immer bei allen Providern gleich definiert. Beim Apache-Server auf Localhost ist hier das ROOT-Verzeichnis angegeben. Nicht so bei einigen Providern. Hier steht das ROOT-Verzeichnis meines Webspaces in der Array-Komponente HOME und DOCUMENT_ROOT enthält den Namen des Skripts. In obigem Skript wird aber nur auf ungleich abgefragt, um den Localhost zu ermitteln.

Der Aufruf aus einem Webseitenskript erfolgt dann mit:

if (file_exists($_SERVER["DOCUMENT_ROOT"]."/COMMON/PROVIDERINFO.php")) {
  include_once $_SERVER["DOCUMENT_ROOT"]."/COMMON/PROVIDERINFO.php";
} elseif (file_exists($_SERVER["HOME"]."/COMMON/PROVIDERINFO.php")) {
  include_once $_SERVER["HOME"]."/COMMON/PROVIDERINFO.php";
} else die("Verzeichnis COMMON nicht gefunden");

Also: Man definiert das Verzeichnis COMMON und legt dort das Skript PROVIDERINFO.php ab. Dann nimmt man obiges Coding z.B. in die index.php auf und probiert aus, ob es klappt.

Wie checkt man das?

Um die Globale Variable $_SERVER in ihrem Inhalt zu untersuchen, was ja notwendig sein kann, kann man zwar PHP eigene Mittel nehmen, die Ausgabe ist aber sehr unübersichtlich.
Ich habe mir dafür eine eigene Routine geschrieben, die man folgendermaßen aufrufen kann:
sbkDumpVars(p1,p2,p3…..);
dabei wird der Parameter p1 mit "pre" bewertet, wenn man einen ARRAY ausgeben will, ansonsten bei Nicht-Arrays lässt man den Parameter weg. Der Parameter p2 enthält einen Text für die Variable, die man ausgeben will und p3 hat dann die Variable. p2 und p3 können vielfach wiederholt werden:
Beispiel:
sbkDumpVar("Variable Hugo",$hugo,"Variable hugo2",$hugo2);

Bleibt noch die Funktion sbkDumpVars. Diesen kann man sich hier herunterladen. Außerdem kann man ein Beispielprogramm für die Anzeige der $_SERVER sich hier herunterladen. (Man muss nur die -txt-Datei zu einer php-Datei machen, sie nach HTDOCS auf dem Localhost stellen und aufrufen.)

Viel Spaß

Bernd Klüppelberg

Bisher gibt es keinen Kommentar. Schreiben Sie einen Kommentar!

Schreibe einen Kommentar