gethostbyname

(PHP 3, PHP 4, PHP 5)

gethostbyname --  Get the IP address corresponding to a given Internet host name

Description

string gethostbyname ( string hostname )

Returns the IP address of the Internet host specified by hostname or a string containing the unmodified hostname on failure.

例子 1. A simple gethostbyname() example

<?php
$ip
= gethostbyname('www.example.com');

echo
$ip;
?>

See also gethostbyaddr(), and gethostbynamel().


add a note add a note User Contributed Notes
ralphbolton at mail2sexy dot com
07-Apr-2006 04:10
On a side-note, PHP (5.0.4, but probably other versions too) can cache gethostbyname information.

In short, once PHP looks up an address, it may not actually perform another lookup as you may expect. In my particular case (I think) the problem was a change to resolv.conf didn't take effect inside PHP (although nslookup/ping etc worked fine). Stop/Starting Apache fixed it (although a simple 'restart' (kill -HUP) didn't).

In short, if you change resolv.conf, stop and restart Apache.
ivan[DOT]pirog[AT]gmail[DOT]com
14-Mar-2006 10:57
Function returns boolean:
<?php
function isDomainResolves($domain)
{
     return
gethostbyname($domain) != $domain;
}
?>
mcgrof at gmail dot com
22-Oct-2005 12:10
Better yet:
<?php
$ip
= rtrim(`/usr/bin/dig $host A +short`);
?>
mcgrof at gmail dot com
22-Oct-2005 12:05
In PHP4 you can use gethostbyname() but I have found this unreliable when doing lookups on entries that return A records on the private network. PHP5 has a much better routine -- dns_get_record(). If you are stuck with PHP4 or don't want to upgrade you can use dig:

<?php
$ip
= `/usr/bin/dig $host A +short`;
?>
tabascopete78 at yahoo dot com
18-Aug-2005 03:29
I was using file_get_contents on a set of URLs. Some of them URLs were invalid (the structure of it was ok but the DNS hosts couldn't resolve them) and I kept getting an annoying warning. I wanted to check the DNS somehow but existing check dns function in php doesn't have one for windows and the one a person supplied there does not work 100% of the time.

Instead use this function to try to resolve a host. This won't throw any warnings, you just need to check the output. You'll get the same warnings with fopen and fsockopen.
cox at idecnet dot com
27-Dec-2004 04:15
For doing basic RBL (Real Time Blacklist) lookups with this function do:

<?php
$host
= '64.53.200.156';
$rbl  = 'sbl-xbl.spamhaus.org';
// valid query format is: 156.200.53.64.sbl-xbl.spamhaus.org
$rev = array_reverse(explode('.', $host));
$lookup = implode('.', $rev) . '.' . $rbl;
if (
$lookup != gethostbyname($lookup)) {
   echo
"ip: $host is listed in $rbl\n";
} else {
   echo
"ip: $host NOT listed in $rbl\n";
}
?>

Tomas V.V.Cox
Vincent
15-Jul-2004 12:14
Note that if you pass an IP address to gethostbyname() it will return that IP address.
30-Mar-2004 06:49
The dns entries get cached, whether they exist or not.  Expect really good response times after the first one.
christian at SPAM at IS at DEAD at MEAT at karg dot org
01-Apr-2003 08:12
I had difficulty getting gethostbyname to work under OpenBSD 3.2 and Apache, until I discovered that the default Apache chroot caused the problem.

To get PHP's gethostbyname to work, you need resolv.conf (and possibly hosts) in /var/www/etc (assuming default install dirs).
tonyhana at sixzeros dot com
04-Jul-2002 10:43
<?php
//script to time DNS propagation
//(Above script modified slightly to show micro time)
//seems pretty damn quick to me.. I'm getting .0055 sec worstcase badhost times.

//A known good dns name (my own)
  
$nametotest = "fuzzygroup.com";
  
//Call address test function
  
$time_start = getmicrotime();
  
testipaddress($nametotest);
  
$time_end = getmicrotime();
  
$time = $time_end - $time_start;
   echo
"Good Host Search took $time seconds<br><br>";

//A known bad name (trust me)
  
$nametotest = "providence.mascot.com";
  
$time_start = getmicrotime();
  
testipaddress($nametotest);
  
$time_end = getmicrotime();
  
$time = $time_end - $time_start;
   echo
"Bad Host Search took $time seconds<br>";
  
  
function
getmicrotime(){
   list(
$usec, $sec) = explode(" ",microtime());
   return ((float)
$usec + (float)$sec);
   }

//ip address checking function
//for real use should have a return value but example code
function testipaddress ($nametotest) {
  
$ipaddress = $nametotest;
  
$ipaddress = gethostbyname($nametotest);
   if (
$ipaddress == $nametotest) {
       echo
"No ip address for host<br>";
   }
   else {
       echo
"good hostname, $nametotest ipaddress = $ipaddress<br>";
   }
}

//Recommended fix for sql applications:
// store url to temporary table
// run second process periodically to
// check urls and update main table
?>
sjohnson at fuzzygroup dot com
17-Mar-2002 02:27
<?php

//script to see if host exists on Internet

//following up on the above point about host name
//checking and SQL timeouts, run this test script
//and see how long it takes for 2nd call to
//hostname check to fail
//NOTE -- not PHP's fault -- nature of DNS

//A known good dns name (my own)
  
$nametotest = "fuzzygroup.com";
  
//Call address test function
  
testipaddress($nametotest);

//A known bad name (trust me)
  
$nametotest = "providence.mascot.com";
//Call address test function
  
testipaddress($nametotest);
  
//ip address checking function
//for real use should have a return value but example code
function testipaddress ($nametotest) {
  
$ipaddress = $nametotest;
  
$ipaddress = gethostbyname($nametotest);
   if (
$ipaddress == $nametotest) {
       echo
"No ip address for host, so host "
            
. "not currently available in DNS and "
            
. "probably offline for some time<BR>";
   }
   else {
       echo
"good hostname, ipaddress = $ipaddress<BR>";
   }
}

//Recommended fix for sql applications:
// store url to temporary table
// run second process periodically to
// check urls and update main table
?>