4

上手。SOでいくつかのトピックを読みましたが、具体的な答えは見つかりませんでした。

PHPコードがローカルホストまたはリモートホストで実行されているかどうかをPHPに確認する必要があります。現在確認して$_SERVER['SERVER_NAME']いますが、一貫性がありません。この場合、のようなリストされたIPを使用してPHPを実行する127.0.0.1localhost、ローカルと見なされます。それ以外の場合はリモートと見なされます。IPを友人と共有する場合、コードはローカルのままですが、共有IPがリストされていないため、リモートと見なされます。

ええと、ローカルホストのIPをチェックするのは良い考えではないと思います(良い方法を知っている場合を除いて)。gethostbyaddr()のような方法を試しgethostbyname()ましたが、正しく機能しません。

表示するPHPコードはありませんが、基本的には次のようになります。

// true = localhost
return $_SERVER['SERVER_NAME'] === '127.0.0.1';

基本的な質問は、PHPがローカルで実行されていることを何が判断できるかということです。PHPの「ローカル」とは何ですか?問題は解決できると思います。

Obs.:PHPでCMD/Shellにアクセスできません。

4

4 に答える 4

5

ほとんどの PHP フレームワークと同じように、コードが実行されている環境を定義するアプリのブートストラップ フェーズ中にフラグを設定できます。最も単純な形式は次のとおりです。

// the setting when run on a dev machine
define('ENV', 'local');

次に、次の単純なケースです。

if ( ENV == 'local' )
{
    // do stuff
}
于 2012-11-21T21:36:04.323 に答える
4

これは私がそれを行う方法であり、検出しようとするよりも信頼性が高いと思います127.0.0.1:

if( strpos(gethostname(), '.local') !== false ) { }

基本的に、私のワークステーションのホスト名はすべてそれに.local追加されています。ワークステーションのホスト名と完全に一致するようにこれを変更できます。

于 2012-11-21T21:34:57.520 に答える
1

チェックしてください$_SERVER['REMOTE_ADDR']=='127.0.0.1'。これは、ローカルで実行している場合にのみ当てはまります。これはサーバーに対してもローカルであることを意味することに注意してください。したがって、PHPページにリクエストを送信するスクリプトがサーバー上で実行されている場合、それらのスクリプトもこの条件を満たすことになります。

誰かがWeb経由でサイトにアクセスしている場合、プロキシの使用に関係なく、表示されるIPアドレスが127.0.0.1(またはIPV6の場合は:: 1)になることはありません。(もちろん、同じサーバー上で自分でプロキシを実行している場合を除きます;)

于 2012-11-21T21:30:10.197 に答える
1

私の知る限り、どのアドレスがローカルであるかを知ることができるのはあなただけです。ネットワークは、ローカルにまったく見えないIPアドレスで設定されている可能性があります。PHPは、私が知る限り、これを単独で判断することはできません。

于 2012-11-21T21:31:44.727 に答える