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

4

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

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

好吧,我认为检查本地主机的IP地址不是一个好主意(除非你知道一个好的方法)。我尝试了像gethostbyaddr()gethostbyname()这样的方法,但它们也不能正确工作。

我没有PHP代码可以展示,但我的代码基本上是这样的:

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

基本问题是:什么可以确定 PHP 正在本地运行?对于 PHP 来说,“本地”是什么意思?我认为这可以解决问题。

注:我无法通过 PHP 访问 CMD/Shell。


1
这个问题没有意义。从 PHP 的角度来看,它总是在本地服务器上运行。 - NullUserException
1
你的“本地”是什么? - zerkms
1
对于 Perl,我在本地机器的文件系统中添加了一个名为 local.txt 的文件,并检查了它是否存在。 - user4035
NullUserException: 只是问题。:( zerkms: 正是我的问题!:D user4035: 我考虑了一下,也许这是唯一可能的解决方案。 - David Rodrigues
@DavidRodrigues 仍然不太明白。到底什么是“远程PHP文件”? - NullUserException
显示剩余3条评论
4个回答

5
您可以像大多数PHP框架一样,在应用程序的引导阶段设置一个标志,定义代码运行的环境。最简单的形式如下:
// the setting when run on a dev machine
define('ENV', 'local');

然后就很简单了:
if ( ENV == 'local' )
{
    // do stuff
}

4

这是我所采用的方法,在尝试检测 127.0.0.1 的可靠性方面,我发现这种方法更加可靠:

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

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


1

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

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


2
只有在本地运行时才会为真,您想表达的是“如果从同一台机器请求”。 - zerkms
请求可能是远程的,但 PHP 始终 在本地运行。 - NullUserException
如果您在VirtualBox或VMware下运行,则会分配给您不同的IP地址-这是一篇旧帖子,但对于搜索“php detect if running locally or on local server”仍然相关。 - James Roeiter

1
据我所知,只有能够知道哪些地址是本地的,哪些不是。您的网络可能设置了根本不像本地地址的IP地址。PHP不能自行确定这一点,据我所知。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接