4

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

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

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

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

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

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

观察者:我无法使用 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 页面发出请求的脚本,它们也将满足此条件。

如果有人通过网络访问您的网站,那么无论使用代理,您看到的 IP 地址都不会是 127.0.0.1(或::1 对于 IPV6)。(当然,除非您自己在同一台服务器上运行代理;)

于 2012-11-21T21:30:10.197 回答
1

据我所知,只有才能知道哪些地址是本地地址。您的网络可能设置了看起来根本不是本地的 IP 地址。据我所知,PHP 无法自行确定。

于 2012-11-21T21:31:44.727 回答