PHP $_SERVER['REMOTE_ADDR'] empty

前端 未结 3 614
渐次进展
渐次进展 2020-12-11 04:09

Somehow $_SERVER[\'REMOTE_ADDR\'] returns an empty string, i have the same code (as part of a script) running on multiple servers and it works everywhere else,

相关标签:
3条回答
  • 2020-12-11 04:49

    if you're behind a proxy server, you can use $_SERVER['HTTP_X_FORWARDED_FOR'] or $_SERVER['HTTP_CLIENT_IP'] instead of $_SERVER['REMOTE_ADDR']. this will depends on how your proxy is configured.

    0 讨论(0)
  • 2020-12-11 05:00

    I had code on a new VM that looked like this. It is being called from a javascript file:

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

    Worked on the old server of course and I was scratching my head for a while thinking there was something wrong with Apache..Was there a module missing? Some obscure Apache setting I can't find?. I thought Apache wasn't sending on the Server variables. That was until I tried the plain ol' fashioned way and it worked:

    echo $_SERVER['REMOTE_ADDR'];
    

    Turned out I had to edit php.ini and set short_open_tag to On. Facepalm - the shortcut php tags weren't working. Hopefully that will help save someone else a head of time :)

    0 讨论(0)
  • 2020-12-11 05:09

    Yes it's possible for REMOTE_ADDR to be empty. so if you want you can use this code that I use to get the ip based on HTTP_X_FORWARDED_FOR

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

    I'm checking REMOTE_ADDR first as it is more reliable and sometimes HTTP_X_FORWARDED_FOR can be spoofed by users

    0 讨论(0)
提交回复
热议问题