【问题标题】:PHP $_SERVER['REMOTE_ADDR'] emptyPHP $_SERVER['REMOTE_ADDR'] 为空
【发布时间】:2013-08-01 21:33:46
【问题描述】:

不知何故$_SERVER['REMOTE_ADDR'] 返回一个空字符串,我在多个服务器上运行相同的代码(作为脚本的一部分),它在其他任何地方都可以工作,它们都是相同的设置。

奇怪的是,当我重新启动 apache 并加载页面时,它只运行一次,如果我重新加载站点 + 之后的所有时间,它就是空的。我让其他人尝试过,同样的结果,空的。

有人建议这是 IPv6 配置的问题,我现在已完全禁用 IPv6,但问题仍然存在。

【问题讨论】:

  • 使用 Apache?任何缓存?
  • 是的 apache,没有缓存。
  • 您确定 Apache 使用 PHP 作为模块而不是 CGI 吗?
  • 是的 PHP 作为模块加载。如果我上传一个只有 在其中,它工作一次。如果我上传另一个具有相同内容的文件,在这个文件上它会再次工作一次!
  • apache 是否在代理后面运行?

标签: php apache


【解决方案1】:

如果您使用代理服务器,则可以使用$_SERVER['HTTP_X_FORWARDED_FOR']$_SERVER['HTTP_CLIENT_IP'] 代替$_SERVER['REMOTE_ADDR']。 这取决于您的代理的配置方式。

【讨论】:

    【解决方案2】:

    是的,REMOTE_ADDR 可能为空。 因此,如果您愿意,可以使用我用来获取基于 HTTP_X_FORWARDED_FOR 的 ip 的代码

    <?php
        if(! empty($_SERVER['REMOTE_ADDR']) ){
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    else{
        $ip = empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? '' : $_SERVER['HTTP_X_FORWARDED_FOR'];
    }
    

    我首先检查 REMOTE_ADDR,因为它更可靠,有时 HTTP_X_FORWARDED_FOR 可能会被用户欺骗

    【讨论】:

    • 我认为最好使用isset($_SERVER['HTTP_X_FORWARDED_FOR'])而不是empty($_SERVER['HTTP_X_FORWARDED_FOR'])
    • 你知道isset和empty的区别吧?当我以前查看服务器的日志时。我遇到了一些浏览器仍在发送 http_x_forward_for 但它是空白的。所以我认为它的 empty() 是需要的
    • 实际上最好同时使用两者...因为客户端可能没有使用代理,因此他们没有设置$_SERVER['HTTP_X_FORWARDED_FOR'] 变量...所以只需检查空将导致php解析时的一些问题..恕我直言..
    • 安德鲁,empty 正在使用 isset() 并检查是否不是空白字符串。它也不会抛出 php 警告。也许你的想法是相反的......php.net/manual/en/function.empty.php Cheers mate
    • 感谢您的提醒..我一直认为 empty 只会检查 ..empty 作为函数名称所述...:) 对我来说它更具可读性isset + empty :)
    【解决方案3】:

    我在一个看起来像这样的新 VM 上编写了代码。它是从 javascript 文件中调用的:

    <?php
    $hostip = $_SERVER['REMOTE_ADDR'];
    ?>
    var myip = "<?=$hostip ?>";
    

    当然是在旧服务器上工作,我摸不着头脑,以为 Apache 出了点问题。是否缺少模块?我找不到一些晦涩的 Apache 设置?我认为 Apache 没有发送服务器变量。直到我尝试了普通的老式方法,它才奏效:

    echo $_SERVER['REMOTE_ADDR'];
    

    原来我必须编辑 php.ini 并将 short_open_tag 设置为 On。 Facepalm - 快捷方式 php 标签不起作用。希望这将有助于节省其他人的时间:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 2021-03-12
      • 2013-10-19
      相关资源
      最近更新 更多