Wir verwenden die folgende Funktion, um automatisch festzustellen, ob wir uns intern oder auf einem Live-Server auf einer Maschine befinden, und wählen dann die entsprechenden Konfigurationen für verschiedene Komponenten aus:
%Vor%Wie Sie sehen können, hängt es nur vom HTTP_HOST-Wert ab.
Natürlich, wenn Sie eine Art virtuellen Host lokal wie beispiel.com verwenden, wird die Funktion ausgetrickst.
Gibt es noch andere Möglichkeiten, die Funktion zu täuschen? Und welche anderen Variablen / Orte könnten wir sehen, um festzustellen, wo wir sind?
Legen Sie eine Umgebungsvariable in Ihrer virtuellen Apache-Host-Konfiguration fest. So funktioniert das Zend Framework.
Siehe die ZF-Kurzanleitung für ein Beispiel (das "Erstellen ein virtueller Host ".)
Setzen Sie in Ihrer httpd.conf oder einer .htaccess-Datei:
%Vor%Verwenden Sie dann in Ihrer Anwendung die Funktion getenv , um den Wert zu erhalten:
%Vor%Hinzufügen zu Andy Shellams Antwort ..
Wenn Sie mod_vhost_alias verwenden oder verschiedene Domänen mit demselben (virtuellen) Dokumentenstamm haben, können Sie die Variable abhängig von Parametern festlegen, z. B.
%Vor%Erstellen Sie und suchen Sie später nach einer Datei, die nur auf dem Dateisystem des Live-Servers existiert.
Zugegeben, Ihre Umgebungen sollten so ähnlich wie möglich sein; was ich vorschlage, ist ungefähr so: im Verzeichnis / var / environment /, habe eine Datei namens {devel | test | qa | staging | live}, je nachdem, auf welchem Server du aktiv bist - dann überprüfe einfach den Dateinamen.
Natürlich müssen Sie diese Datei von der Versionskontrolle und von jedem beliebigen Build-Prozess ausschließen.
Natürlich, wenn Sie einen virtuellen Host lokal wie beispiel.com verwenden, wird die Funktion ausgetrickst.
Auch wenn der Host nicht lokal ist, sondern eine widlcard oder default vhost defn verwendet und der Benutzer die IP-Adresse lokal zur hosts-Datei hinzufügt.
Ich würde empfehlen, auf dem Include-Pfad ein Verzeichnis zu haben, das auch live existiert, aber dort nicht repliziert wird - und einfach speichern:
%Vor%oder
%Vor%Wenn beide envs auf demselben Server sind - Sie können dies trotzdem tun, indem Sie den include_path in Apache config oder .htaccess einstellen.
Dadurch können Sie auch potenziell sensible env-spezifische Daten - wie Datenbankhosts / Kennwörter und Verschlüsselungsschlüssel - trennen.
C.
Tags und Links php development-environment production-environment autodiscovery