5

Is $_SERVER['SERVER_ADDR'] always set?

Should I check with isset() or is that unnecessary?

I need to get the IP of the site so I can find out if it's 127.0.0.1/localhost

Jason
  • 15,017
  • 23
  • 85
  • 116
Nick
  • 53
  • 1
  • 3

4 Answers4

4

No, in CLI it's not set. So not always.

$ php -r "echo $_SERVER['SERVER_ADDR'];"

(no output)

If you have errors logged or reported (based on your PHP.ini settings), you will get this message as well:

PHP Notice: Undefined index: SERVER_ADDR in Command line code on line 1
hakre
  • 193,403
  • 52
  • 435
  • 836
  • 1
    And to make this absolutely certain to the dubious, there is a PHP Notice: `PHP Notice: Undefined index: SERVER_ADDR in Command line code on line 1` – Milo LaMar Dec 12 '11 at 16:46
  • I wasn't convinced `$_SERVER['SERVER_ADDR']` wasn't just an empty string so I decided to make sure :) – Milo LaMar Dec 13 '11 at 03:52
  • Unset variables converted to strings are just an empty string. More strictly the variable is just `NULL`. – hakre Dec 13 '11 at 08:04
  • Ah, interesting. So undefined indexes are NULL :) I could have been more precise by saying I wanted to make sure `isset($_SERVER['SERVER_ADDR']) === FALSE` – Milo LaMar Dec 13 '11 at 15:20
4

It's not going to always be set. Consider that you can install PHP without even having a server and run it from command line. There is no guarantee with any of the $_SERVER variables, but if you try it once on your server and it works then you can bet that it will always be set on that server configuration. You just need to make a note somewhere that if you ever do a major change on your server's configuration, or switch servers you should check it again.

You can also check the value of your server variables with phpinfo()

Paul
  • 139,544
  • 27
  • 275
  • 264
1

CLI is a good example of when it's not set, but all of the _SERVER values are set by the server that php is running on, so depending upon the server you are using and its configuration, there's no guarantee that it will be set anyway.

Explosion Pills
  • 188,624
  • 52
  • 326
  • 405
0

As previously said via cli it's not available. Just in case you need to know the IP address both via cli or via HTTP call consider using something like following:

$IP = isset($_SERVER['SERVER_ADDR'])?$_SERVER['SERVER_ADDR']:gethostbyname(gethostname());
koalaok
  • 5,075
  • 11
  • 47
  • 91