2017-03-27 4 views
0

私はここで自分のスキルを向上させようとしています。さまざまな理由(db接続、デバッグ出力などを含む)では、私のサイトがローカル(XAMPP)で実行されているのかリモートで実行されているのかを判断する必要があります。私はこれを行う時点では...仕事ないこれは、サイトがローカルで実行されているかどうかを確認する最もエレガントな方法ですか?

$root = $_SERVER["DOCUMENT_ROOT"]; 
$baseurl = $_SERVER["SERVER_NAME"]; 
$parts = explode("/",$root); 
$base = $parts[0]; 

if($base == "C:") { 
if(!defined('LOCAL')){ 
    define('LOCAL', true); 
} else { 
if(!defined('LOCAL')){ 
    define('LOCAL', false); 
}; 

を...しかし、私は、リモート対ローカル検出するために、よりエレガントな解決策があります感じて助けることができませんか?

ローカルドメインは決して単に "localhost"ではないことを覚えておいてください - 私はXAMPPの仮想ホストにマップされた独自のドメインを使用して何百ものローカルサイトを持っています。

お寄せいただきありがとうございます。

+2

ローカルサーバ上にApacheで ''を設定することができます。その中で 'LOCAL'のような環境変数を設定して、それが定義されているかどうかをチェックしてください。ローカル版とオンライン版の間でコードを変更する必要はありません。 – CD001

+0

''に環境変数を設定できますか?それは非常に面白いです! – mayersdesign

+0

うん、 - Apache mod_env:https://httpd.apache.org/docs/2.4/mod/mod_env.html ...あなたはmod_rewriteを通してそれを行うこともできます。 mod_rewriteがmod_envより前に実行されているので、環境変数*を書き直しで使用したい場合は、これを実行する必要があります。 – CD001

答えて

2

flat-PHPでは、$_SERVER['SERVER_ADDR']を使用します。 XAMPPでは、デフォルトで$_SERVER['SERVER_ADDR']::1です。

XAMPPを実行する同じマシンでコーディングする場合は、$_SERVER['SERVER_ADDR']$_SERVER['REMOTE_ADDR']を比較することもできます。

+0

これらの変数は "127.0.0.1"を出力しますので、私のコードのいくつかの行を削除することをお勧めします:) – mayersdesign

+1

@mayersdesign ':: 1'はIPv6用、' 127.0.0.1'はIPv4用です。それらが実際には同じアドレスを意味するので、それらの2つのいずれかであるかどうかを確認してください。 – apokryfos

+0

@apokryfos - はい、私は見て、IPv6について他に何かを学んだこともあります。 – mayersdesign

2

リモートWindowsサーバーに展開すると、現在のソリューションが壊れることはありません。それは間違いなく良い練習ではありません。特にLaravelはdotenvを使用して、各サーバーに環境構成ファイルを展開し、使用される基本定数を定義することでこれを解決します。

あなたがお住まいの地域で.envを持つことができますたとえば:

APPLICATION_ENVIRONMENT=local 

リモート

APPLICATION_ENVIRONMENT=notlocal 

を次にあなたが起動時に実行できます。

$dotenv = new Dotenv\Dotenv(__DIR__); 
$dotenv->load(); 

次にあなたが使用することができますgetenv値を取得する:

if(!defined('LOCAL')){ 
    define('LOCAL', getenv("APPLICATION_ENVIRONMENT") == "local"); 
}; 
+0

私はLinuxサーバーだと言わざるを得ないが、Windows、ユーザー、そしてアップした人には素晴らしいフィードバックだ。 – mayersdesign

+0

ほとんど同じ原理を使用しますが、環境設定ファイルではなく、 ''に直接環境変数を設定しています。 – CD001

+0

@ CD001このアプローチには、apache configと比較して利点や欠点があるかどうかは不明です。私はLaravelを使用していますので、この方が好きです(これにはすでに箱が入っています)。 VirtualHostは、フレームワークを使用していない方が簡単です。 – apokryfos

関連する問題