PHP: ошибка gethostbyname

Я использую gethostbyname() чтобы получить IP-адрес доменов в приложении.

В некоторых случаях также проверяются неверные адреса, например «50 .9.49».

 echo gethostbyname('50.9.49'); // returns 50.9.0.49 

В этом случае gethostbyname должен возвращать false или немодифицированный неверный IP-адрес. однако функции возвращают измененный IP-адрес 50.9.0.49 .

Похож на ошибку в php. Быстрое исправление, по-видимому, заключается в проверке недействительных числовых адресов раньше, есть ли какие-либо другие предложения?

PHP gethostbyname самом деле использует результаты gethostbyname базовой ОС, например, из netdb.h Linux или Windows Winsock2.h . Именно эти функции производят возвращаемое значение, а не PHP.

 /* {{{ php_gethostbyname */ static char *php_gethostbyname(char *name) { struct hostent *hp; struct in_addr in; hp = gethostbyname(name); if (!hp || !*(hp->h_addr_list)) { return estrdup(name); } memcpy(&in.s_addr, *(hp->h_addr_list), sizeof(in.s_addr)); return estrdup(inet_ntoa(in)); } /* }}} */ 

Похоже, что это недокументированная функция для работы IP-адресов. Как упоминалось в комментариях к вашему вопросу, ping 50.9.49 в Windows на самом деле 50.9.0.49 . Если вы введете адрес как abd , он автоматически ab0.d нуль как c : ab0.d Если вы просто вводите ad , вставляются два нуля: a.0.0.d

Это было протестировано как с Windows 7, так и с Debian Linux.