好。我在SO中阅读了一些主题,但我没有找到一个非常具体的答案。
如果PHP代码在本地或远程主机上运行,我需要检查PHP。目前我检查$_SERVER['SERVER_NAME']
但是它不一致。在这种情况下,如果我使用列出的IP(如127.0.0.1
或localhost
运行PHP,它将考虑本地,否则为远程。如果我与朋友分享我的IP,我的代码仍然是本地的,但它认为是远程的,因为没有列出共享IP。
好吧,我认为检查localhost的IP不是一个好主意(除非你知道一个好的方法)。我尝试了gethostbyaddr()
和gethostbyname()
等方法,但也无法正常使用。
我没有要显示的PHP代码,但我的代码基本上是:
// true = localhost
return $_SERVER['SERVER_NAME'] === '127.0.0.1';
基本问题是:什么可以确定PHP是在本地运行?什么是PHP的“本地”?我认为它可以解决问题。
Obs。:我无法使用PHP访问CMD / Shell。
答案 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本身并不能确定它。