17.10. Checking if a Host Is Alive
Problem
You want to ping a host to see if it is still up and accessible from your location.
Solution
Use
PEAR’s
Net_Ping package:
require 'Net/Ping.php';
$ping = new Net_Ping;
if ($ping->checkhost('www.oreilly.com')) {
print 'Reachable';
} else {
print 'Unreachable';
}
$data = $ping->ping('www.oreilly.com');Discussion
The ping program tries to send a message from your machine to another. If everything goes well, you get a series of statistics chronicling the transaction. An error means that ping can’t reach the host for some reason.
On error, Net_Ping::checkhost( )
returns false,
and Net_Ping::ping( )
returns the constant
PING_HOST_NOT_FOUND. If there’s a
problem running the ping program (because
Net_Ping is really just a wrapper for the
program), PING_FAILED is returned.
If everything is okay, you receive an array similar to this:
$results = $ping->ping('www.oreilly.com');
foreach($results as $result) { print "$result\n"; }
PING www.oreilly.com (209.204.146.22) from 192.168.123.101 :
32(60) bytes of data.
40 bytes from www.oreilly.com (209.204.146.22): icmp_seq=0 ttl=239
time=96.704 msec
40 bytes from www.oreilly.com (209.204.146.22): icmp_seq=1 ttl=239
time=86.567 msec
40 bytes from www.oreilly.com (209.204.146.22): icmp_seq=2 ttl=239
time=86.563 msec
40 bytes from www.oreilly.com (209.204.146.22): icmp_seq=3 ttl=239
time=136.565 msec
40 bytes from www.oreilly.com (209.204.146.22): icmp_seq=4 ttl=239
time=86.627 msec
-- - www.oreilly.com ping ...