PHP Internet Services
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 = Net_Ping::factory();
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 a Net_Ping_Result object. This object has assorted methods allowing you to retrieve the information about the ping operation. For example:
require 'Net/Ping.php';
$ping = Net_Ping::factory();
$result = $ping->ping('www.oreilly.com');
print<<<_INFO_
Ping of www.oreilly.com ({$result->getTargetIp()})
with {$result->getTransmitted()} requests had
a minimum time of {$result->getMin()} ms and
a maximum time of {$result->getMax()} ms.
_INFO_
;
This prints something like:
Ping of www.oreilly.com (23.67.61.152)
with 3 requests had
a minimum time of 35.4 ms and
a maximum time of 40.586 ms.
The Net_Ping::setArgs() method lets you change a few things about how the ping program is run. For example, you can call $ping->setArgs(array('count' => 7)) to tell Net_Ping to send seven ping packets instead of the default (usually three or four).
No comments:
Post a Comment