PHP $_SERVER['REMOTE_ADDR'] empty
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
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 :)