【问题标题】:php detect if document index is localhostphp检测文档索引是否为localhost
【发布时间】:2012-02-12 23:30:04
【问题描述】:

我想知道如何检测用户是否在本地主机上。

我这样做的原因是我可以在实时服务器上自动运行生产代码,但在我的机器上运行未压缩的代码,而不必一直更改链接。

我知道我可以像这样在 JS 中做到这一点... if(document.URL.indexOf("localhost:8888")

但我需要在 PHP 中进行 WordPress 安装。我在这里遇到过类似的问题 - How can I detect if the user is on localhost in PHP?

所以我尝试了这个(如下),但它无法加载任何内容

<?php if(IPAddress::In(array("127.0.0.1","::1"))) { ?>
        <script src="<?php bloginfo('template_url'); ?>/js/scripts.js"></script>
<?php } ?>

我也在这里尝试过建议的解决方案,但同样对我不起作用How can I detect if the user is on localhost in PHP?

如果这些细节有帮助,我在 Mac 上使用 MAMP,并安装了 WordPress。

【问题讨论】:

    标签: php wordpress if-statement ip-address


    【解决方案1】:

    使用 $_SERVER 全局变量:http://www.php.net/manual/en/reserved.variables.server.php

    if (in_array($_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1'))) {
        // code for localhost here
    }
    

    编辑:关于 TerryE 的评论,您可能想做这样的事情(或查看他的正则表达式答案,尽管可能不需要):

    if (substr($_SERVER['REMOTE_ADDR'], 0, 4) == '127.'
            || $_SERVER['REMOTE_ADDR'] == '::1') {
        // code for localhost here
    }
    

    因为 localhost 可以是 127.0.0.0/8 中的任何内容,尽管 127.0.0.1 是最常见的。 http://en.wikipedia.org/wiki/Localhost

    虽然我最初的答案可能会很好(这是 Symfony2 默认使用的“保护”app_dev.php 免受意外生产使用)

    【讨论】:

    • 太好了,谢谢马特。最后,你知道在加载之前检查地址是否有任何性能损失,比如加载脚本?
    • 我会说这非常微不足道。如果有的话,in_array 对于大型数组可能会很慢,但 2 个元素不应该很慢。本质上,您正在进行两个字符串比较,因此这不会减慢您的速度。如果这对性能至关重要,那么无论如何您都应该为您的开发机器使用不同的引导/前端控制器。
    • 其实127.0.0.1/8的意思是前8位是固定的。所以它不仅是 127.0.0.X,甚至是 127.X.Y.Z,尽管 127.0.0.1 是迄今为止最常见的地址。
    • 哦,我明白了,我倒过来了
    【解决方案2】:

    与马特的回答类似,您可以使用服务器变量

    if(!(strpos($_SERVER['SERVER_NAME'], 'localhost') === false)){
       //on localhost
    }
    

    【讨论】:

    • SERVER_NAME 并非始终可用。
    【解决方案3】:

    使用preg_match('!127\.0\.\d+\.\d+!', $_SERVER["REMOTE_ADDR"])。 B 类匹配会没问题,因为有时它会出现在 127.0.1.1 等。

    【讨论】:

    • Matt 也是正确的:您还应该检查 IPv6 环回:'!(127\.0\.\d+\.\d+|::1)!'
    • 你真的需要正则表达式吗?为什么 localhost 永远是 127.0.1.1?我想我只是很确定 localhost 总是 127.0.0.1。
    • 请参阅WP:localhost,您显然在 PC/笔记本电脑上运行 WinXXXX。世界上很多其他地方都在运行 Linux、IOS,... :-)
    • 啊,不知道。但是那不是说 127.0.0.X 是环回,因为 /8 部分只会影响最后 8 位吗?所以基本上匹配任何以127.0.0. 开头的字符串应该有效吗?是的,我确实主要运行 Windows,但有相当多的 Linux 经验和一个虚拟机。
    猜你喜欢
    • 2017-01-04
    • 1970-01-01
    • 2014-01-26
    • 2011-06-16
    • 2016-10-01
    • 2011-08-24
    • 2012-07-02
    • 2021-09-23
    相关资源
    最近更新 更多