2017-08-23 5 views
2

Ich habe eine einzelne Code-Basis, die ich auf mehreren Servern bereitstellen.PHP: Identifizieren Sie den lokalen Server konsistent

Ich muss identifizieren, auf welchem ​​Server der Code ausgeführt wird, um die richtigen Konfigurationsinformationen für die Datenbank usw. zu verwenden.

Ich versuchte zunächst, den DOCUMENT_ROOT zu verwenden und nach dem Kontoname zu suchen.

if (strpos($_SERVER['DOCUMENT_ROOT'], '/var/www/vhosts/SOMETHING.com/') !== false) 
{ //is a specific server } 

Dies funktioniert gut, aber ich entdeckte, dass, wenn meine Cron-Jobs ausgeführt DOCUMENT_ROOT leer ist, wenn sie von Plesk gestartet.

Gibt es eine bessere Möglichkeit, den Server zu identifizieren?

Ich möchte keine serverspezifische Konfigurationsdatei haben, da die FTP-Synchronisierungssoftware, die sicherstellt, dass alle Dateien auf allen Servern gleich sind, das Ausschließen einiger Dateien nicht unterstützt.

Außerdem können die Server verschiedene Steuerpulte und Setups ausführen, also wünsche ich etwas so allgemein wie möglich.

+2

Diese Cron-Jobs sind verantwortlich für die Ausführung einiger in PHP geschriebener Konsolenanwendungen, richtig? Wie richtest du sie auf? Manuell auf jedem Server? In diesem Fall können Sie den Servernamen als Befehlszeilenargument an die Konsolenanwendung übergeben. – Nima

+1

Wenn Sie PHP über die Befehlszeile ausführen, ist kein Webserver beteiligt. Also wird '$ _SERVER' nichts zurückgeben. Es gibt einen 'hostname' Befehl, den Sie über die Kommandozeile ausführen können. Vielleicht versuchen Sie das mit 'exec()', um es über PHP zu lesen? – Andy

+0

@Nima, danke, ich habe nicht daran gedacht, die Serverinformationen über den Cron-Befehl zu übergeben. – seventeen

Antwort

0

Ich fand $ _SERVER ['HOME'] via Cron ist das gleiche wie DOCUMENT_ROOT.

Dies funktioniert das gleiche auf Plesk und Cpanel-Implementierungen von Cron.

Ich glaube, das ist besser als die Übergabe des Parameters über den Cron-Befehl, weil ich immer noch dafür testen müsste, und würde auch Cron pro Server setzen, eher, dass dies innerhalb des Skripts zu behandeln.

2

Sie können den Servernamen als Befehlszeilenargument übergeben, wenn Sie den Cron-Job einrichten.

+0

Diese Methode hat auch funktioniert. – seventeen

Verwandte Themen