The PHP Extension and Application Repository (PEAR) has a Net/* hierarchy that includes a number of classes for interacting with the network layer. One particularly handy class is Net_Ping, which, as the name implies, lets you run a ping from PHP.
Readable ping data
Most of us would probably prefer the output in a more readable format. To this end, the Net_Ping class offers a number of methods designed to extract specific subsets of data from the array in Listing A. These include getTargetIp() for the IP address; getMin(), getMax(), and getAvg() for response times; getLoss() for the number of lost packets; getBytesTotal() for the total number of bytes transmitted; and getRawData() for the raw output of the ping command.
Consider the example in Listing B, which demonstrates these methods (and a few others) in action. There are three items of note in this example code:
1. We've revised the script from our basic ping example to make it more interactive. The domain name can now be retrieved from the user through a form instead of being hardwired into the script.
2. The response returned by the remote host is broken down using the methods listed previously and is formatted into a neat report. Look in the script comments to see exactly what each method does, or run the ping command at your shell prompt to gain a better understanding of what each field means.
3. The setArgs() method is used to pass additional parameters to the ping command. This method accepts an associative array of variable-value pairs. The two important ones here are "size", which controls the size, in bytes, of the ping packets transmitted, and "count", which controls the total number of packets transmitted. The script above allows the user to specify the latter variable through a form field.