Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I have werid problem with name resolution. I am trying to connect to active directory server. I can successfully get the ldap server address from the SRV recodrs. Then I try to resolve the dns names to IP addresses and it fails:

echo 'example.com.:' . PHP_EOL; echo gethostbyname('example.com.'); echo PHP_EOL; echo 'dc1.veracomp.local.:' . PHP_EOL; echo gethostbyname('dc1.my-company.local.'); echo PHP_EOL; echo 'nslookup dc1.my-company.local.:' . PHP_EOL; echo `nslookup dc1.my-company.local.`;

The example.com is resolved correctly, then the gethostbyname('dc1.my-company.local.') fails after a few seconds returning dc1.my-company.local. instead of the IP address. Still the same PHP script can call nslookup which correctly resolves the domain name...:

example.com.:
93.184.216.119
dc1.my-company.local.:
dc1.my-company.local.
nslookup  dc1.my-company.local.:
Server:         xxx.xxx.254.117
Address:        xxx.xxx.254.117#53
Name:   dc1.my-company.local
Address: 192.168.12.21

What is wrong here?

EDIT: I am asking for name resolution beacuse the real problem i have is that I can connect to ldap://192.168.12.21 or to ldap://dc1.my-company.pl, but I cannot connect to ldap://dc1.my-company.local.

Unfortunatelly the SRV records for _ldap._tcp.my-company.pl returns only local addresses. I do not want to hardcode the .pl address. And I do not understand why I have to manually resolve the local addresses before passing them to Zend_Ldap as a host option.

Another guess is that PHP built-in function considers .local as not-valid domain - hence the error. – Peon Nov 13, 2013 at 13:00

You should avoid its use in production. DNS Resolution may take from 0.5 to 4 seconds, and during this time your script is NOT being executed.

I use this one; this will be faster and more efficient:

function getAddrByHost($hosts, $timeout = 3) { $returnString = ''; foreach ($hosts as $host) { $query = `nslookup -timeout=$timeout -retry=1 $host`; if (preg_match('/\nAddress: (.*)\n/', $query, $matches)) $returnString .= trim($matches[1]) . '<br>'; $returnString .= $host . '<br>'; return $returnString; $hostArray[] = 'www.example.com'; $hostArray[] = 'dc1.my-company.local'; $returnString = getAddrByHost($hostArray); echo $returnString; Thanks for suggestion. I might, and probably will use your solution, but I would still like to know why PHP is not able to resolve a correct dns domain name from local scope. – SWilk Nov 13, 2013 at 12:54

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.