Всегда ли установлен параметр $ SERVER['server ADDR']?


Всегда ли задано $_SERVER['SERVER_ADDR']?

Должен ли я проверить isset() или это не нужно?

Мне нужно получить IP-адрес сайта, чтобы я мог узнать, является ли он 127.0.0.1 / localhost

4 4

4 ответа:

Он не всегда будет установлен. Учтите, что вы можете установить PHP даже без сервера и запустить его из командной строки. Нет никакой гарантии с любой из переменных $_SERVER, но если вы попробуете его один раз на вашем сервере, и он работает, то вы можете поспорить, что он всегда будет установлен на этой конфигурации сервера. Вам просто нужно где-то отметить, что если вы когда-нибудь сделаете серьезное изменение в конфигурации вашего сервера или переключите серверы, вы должны проверить это снова.

Вы также можете проверить значение переменных вашего сервера с phpinfo()

Нет, в CLI он не установлен. Так бывает не всегда.

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

(выход отсутствует)

Если у вас есть ошибки, зарегистрированные или сообщенные (на основе вашего PHP.ini settings), вы также получите следующее сообщение:

PHP Notice: Undefined index: SERVER_ADDR in Command line code on line 1

CLI-хороший пример, когда он не задан, но все значения _SERVER задаются сервером, на котором работает php, поэтому в зависимости от используемого сервера и его конфигурации нет никакой гарантии, что он будет установлен в любом случае.

Как было сказано ранее через cli, он недоступен. Просто в случае, если вам нужно знать IP-адрес как через cli, так и через HTTP-вызов, рассмотрите возможность использования чего-то вроде следующего:

$IP = isset($_SERVER['SERVER_ADDR'])?$_SERVER['SERVER_ADDR']:gethostbyname(gethostname());