【问题标题】:How to check if the php script is running on a local server?如何检查 php 脚本是否在本地服务器上运行?
【发布时间】:2011-07-08 14:48:57
【问题描述】:

是否可以检查网站 (php) 是在本地运行还是在托管服务器上运行? 如果网站在本地运行,我想启用一些日志,并且我不希望这些日志在线出现在网站上.. 我可以设置一个变量$local=1;,但我必须在上传之前对其进行更改.. 有没有办法自动执行此任务?

本地服务器:WampServer 2.0 / Apache 网络服务器:Apache

【问题讨论】:

    标签: php apache


    【解决方案1】:

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

    【讨论】:

    • 感谢工作! $local = $_SERVER['REMOTE_ADDR']=='127.0.0.1' ? 1 : 0; 是我用的 :)
    • 请注意,如果您在网络上做过任何类型的工作,127.0.0.1 可能不是您服务器的 IP 地址。请务必将上面的 IP 替换为您服务器的实际 IP。
    • 还允许某些服务器(如 Mac OSX)报告 IPv6 值,因此您需要:$local = ($_SERVER['REMOTE_ADDR']=='127.0.0.1' || '::1') 或类似名称。如果您的本地环境使用不同的主机名,例如 mysite.local 等,您也可以使用 HTTP_HOST 值。
    • @Matthieu localhost 无关紧要,因为我们正在谈论 IP 地址。感谢 cmets Charles 和 ldg!
    • @PabloPazos 问题是明确询问网络应用程序。
    【解决方案2】:

    我认为最好的方法是“伪造”测试模式,这可以通过在本地环境中创建文件来完成。
    当我使用这种方法时,我创建了一个名为 testing.txt 的空文本文件,然后使用以下代码:

    if (file_exists('testing.txt')) {
        // then we are local or on a test environment
    } else {
        // we are in production!
    }
    

    此方法与任何操作系统 100% 兼容,如果您需要更精细的方法(例如 development.txttesting.txtstaging.txtproduction.txt),您可以使用多个测试文件以自定义您的部署过程。

    【讨论】:

    • 很难击败这个解决方案,所以我选择了它。谢谢?
    【解决方案3】:

    您应该自动部署

    这不是您问题的直接答案,但在我看来是更好的方法。在自动化部署过程中,设置像 $local = true 这样的变量,就像其他配置值(例如您的 db-connection)一样,不会是手动的、容易出错的任务。

    在我看来,检查“本地性”是错误的方式:您不想向每个本地访问者显示您的日志(代理可能是其中之一),但仅在部署在测试环境中时 .

    一种流行的自动化部署工具是Capistrano,应该也有以 PHP 为中心的工具。

    【讨论】:

    • 如果有人通过网络访问您的网站,无论使用代理,您看到的 IP 地址都不会是 127.0.0.1(或 IPV6 的 ::1)。 (当然,除非您自己在同一台服务器上运行代理;)
    • Jenkins 和带有 PhpUnderControl 的 CruiseControl 也是与 PHP 持续集成的好方法。
    • @Michael Mior:是的,就是这样,代理在同一台机器上。
    【解决方案4】:
    $whitelist = array(
        '127.0.0.1',
        '::1'
    );
    
    if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
        // not valid
    }
    

    【讨论】:

      【解决方案5】:

      以防万一这对任何人都有用,我做了这个功能,因为上面的答案并没有真正做到我想要的:

      function is_local() {
          if($_SERVER['HTTP_HOST'] == 'localhost'
              || substr($_SERVER['HTTP_HOST'],0,3) == '10.'
              || substr($_SERVER['HTTP_HOST'],0,7) == '192.168') return true;
          return false;
      }
      

      【讨论】:

      • 对于主机IP地址检查,使用$_SERVER['SERVER_ADDR']
      • 在 CLI 上不起作用。
      【解决方案6】:

      我已经构建了这个函数来检查当前服务器名称是否有名称服务器记录,通常本地服务器没有。

      <?php
      function isLocal ()
      {
        return !checkdnsrr($_SERVER['SERVER_NAME'], 'NS');
      }
      ?>
      

      【讨论】:

        【解决方案7】:

        您的远程服务器不太可能有 C 盘!所以我用这个运行:

        //Local detection
        $root = $_SERVER["DOCUMENT_ROOT"];
        $parts = explode("/",$root);
        $base = $parts[0];
        $local = false;
        if ($base == "C:") { 
         $local = true; //Change later for if local
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-02-05
          • 1970-01-01
          • 1970-01-01
          • 2010-09-12
          • 1970-01-01
          • 2011-11-10
          • 1970-01-01
          相关资源
          最近更新 更多