2017-08-23 1 views
2

私は複数のサーバーに展開する単一のコードベースを持っています。PHP:一貫してローカルサーバーを特定する

データベースなどの正しい構成情報を使用するために、コードが実行されているサーバーを特定する必要があります。

私は最初にDOCUMENT_ROOTを使用してアカウント名を確認しようとしました。

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

しかし、これは私が私のcronジョブが実行されたときのPleskから開始されたときにDOCUMENT_ROOTは、空であることを発見し、うまく動作します。

サーバーの識別にはより良い方法がありますか?

すべてのサーバーですべてのファイルが同じであることを保証するFTP同期ソフトウェアは、一部のファイルの除外をサポートしていないため、サーバー固有の構成ファイルは必要ありません。

さらに、サーバーは異なるコントロールパネルと設定を実行している可能性がありますので、可能な限り一般的なものをお願いいたします。

+2

これらのcronジョブは、PHPで書かれたコンソールアプリケーションを実行する責任がありますか?どのようにそれらを設定しますか?各サーバーで手動で?その場合は、コマンドライン引数としてサーバー名をコンソールアプリケーションに渡すことができます。 – Nima

+1

PHPをコマンドラインから実行している場合、関連するWebサーバはありません。だから '$ _SERVER'は何も返しません。コマンドラインから実行できる 'hostname'コマンドがあります。たぶん、 'exec()'を使ってPHPで読むことができますか? – Andy

+0

@ニマ、ありがとう、私はcronコマンドを介してサーバー情報を渡すことを考えなかった。 – seventeen

答えて

0

私は$ _SERVER ['HOME']がcron経由で見つかりましたが、DOCUMENT_ROOTと同じです。

これは、cronのpleskとcpanelの実装でも同じです。

これは、まだテストする必要があり、スクリプト内でこれを処理するのではなく、サーバーごとにcronを設定する必要があるため、パラメータをcronコマンドで渡すよりも優れていると思います。

2

cronジョブを設定するときに、コマンドライン引数としてサーバー名を渡すことができます。

+0

この方法も有効でした。 – seventeen

関連する問題