检查PHP是否在本地服务器上运行

时间:2012-11-21 21:28:18

标签: php

好。我在SO中阅读了一些主题,但我没有找到一个非常具体的答案。

如果PHP代码在本地或远程主机上运行,​​我需要检查PHP。目前我检查$_SERVER['SERVER_NAME']但是它不一致。在这种情况下,如果我使用列出的IP(如127.0.0.1localhost运行PHP,它将考虑本地,否则为远程。如果我与朋友分享我的IP,我的代码仍然是本地的,但它认为是远程的,因为没有列出共享IP。

好吧,我认为检查localhost的IP不是一个好主意(除非你知道一个好的方法)。我尝试了gethostbyaddr()gethostbyname()等方法,但也无法正常使用。

我没有要显示的PHP代码,但我的代码基本上是:

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

基本问题是:什么可以确定PHP是在本地运行?什么是PHP的“本地”?我认为它可以解决问题。

Obs。:我无法使用PHP访问CMD / Shell。

4 个答案:

答案 0 :(得分:4)

您可以执行大多数PHP框架所做的事情,并在应用程序的引导阶段设置一个标志,以定义运行代码的环境。以最简单的形式:

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

然后是一个简单的例子:

if ( ENV == 'local' )
{
    // do stuff
}

答案 1 :(得分:2)

我就是这样做的,我觉得比试图检测127.0.0.1更可靠:

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

基本上,我工作站上的主机名都附加了.local。您可以将其更改为完全匹配工作站的主机名。

答案 2 :(得分:1)

检查$_SERVER['REMOTE_ADDR']=='127.0.0.1'。只有在本地运行时才会出现这种情况。请注意,这也意味着服务器本地。因此,如果您在服务器上运行任何向PHP页面发出请求的脚本,它们也将满足这一条件。

如果有人通过网络访问您的网站,您看到的IP地址永远不会是127.0.0.1(或IPV6为:: 1),无论代理使用情况如何。 (当然,除非您在同一台服务器上运行代理;)

答案 3 :(得分:1)

据我所知,只有才能知道哪些地址是本地的。您的网络可以使用看起来不是本地的IP地址进行设置。据我所知,PHP本身并不能确定它。