How To Ping a Website or Server With PHP

How to Ping a website or server?

We all know to ping a website in the case of windows OS (XP, W7, W8) you simply open your command window (Start->Run, type in ‘CMD’ and press Enter), Type in ‘Ping www.google.com’.

Replace ‘www.google.com’ with the IP or website domain name with the one you want, and you should get the result.

With this PHP script, you can ping a website, server or terminal(e.g. PC) that is within your network, which means you don’t need to sit in front of a computer to check if a server or website is down, but also through your mobile phone, tablet etc that has internet access.

It’s simply a single function, with some modification you can make it really powerful and useful.

[sourcecode language=”php”]
<?php

##############################################
#
# Script By Oscar Liang – www.oscarliang.com
# Version 1.0
# 01/March/2013
#
##############################################

function ping($target){

$result = array();

/* Execute Shell Command To Ping Target */
$cmd_result = shell_exec(“ping -c 1 -w 1 “. $target);

/* Get Results From Ping */
$result = explode(“,”,$cmd_result);

/* Return Server Status */
if(eregi(“0 received”, $result[1])){
return ‘offline’;
}
elseif(eregi(“1 received”, $result[1])){
return ‘online’;
}
else{
return ‘unknown’;
}

}

$target = ‘google.com’;

echo ‘”‘.$target.'”‘ . ‘ is ‘ . ping ( $target );

?>
[/sourcecode]

6 thoughts on “How To Ping a Website or Server With PHP

  1. sanjay makwana

    i am run on windows os this code error is =>

    Parse error: syntax error, unexpected ‘1’ (T_LNUMBER) in F:\XAMPP\htdocs\code\ping gl.php on line 16

    Reply
  2. Conrad Bate

    NB:: I couldn’t get SELINUX to stop stopping the shell_exec (after changing the following variables httpd_tmp_exec, allow_httpd_anon_write, httpd_can_network_relay, httpd_can_network_connect, httpd_ssi_exec
    httpd_can_network_connect_cobbler, httpd_verify_dns, httpd_execmem) I turned if off by edtting `/etc/sysconfig/selinux` to say “disabled” and rebooting machine

    Reply
  3. Conrad Bate

    on centos you have to run as root

    # setsebool -P httpd_ssi_exec 1

    on CentOS run this line to get this script to work : by default `shell_exec` will not run under SELinux

    Reply
  4. Daniel Price

    Thanks for your help, but here’s a similar function that I made from parts of yours that returns an array of results:
    [0] = min ping time,
    [1] = avg ping time,
    [2] = max ping time,
    [3] = mdev of ping times,

    You can specify the IP / Web address and the number of pings (hopefully useful).

    $results = ping(ip_address, pings)
    // min = $results[0];
    // avg = $results[1];
    // max = $results[2];
    // mdev = $results[3];

    The function:

    function ping($t,$p){
    $r = array();
    $st = “ping -c “.$p.” -w “.$p.” “.$t;
    $cr = shell_exec($st);
    $r = explode(“,”,$cr);
    $so = $r[3];
    $st = ‘max/mdev =’;
    $so = substr($so,strpos($so,$st)+strlen($st));
    $st = ‘/’;
    $min = substr($so,0,strpos($so,$st));
    $so = substr($so,strpos($so,$st)+strlen($st));
    $avg = substr($so,0,strpos($so,$st));
    $so = substr($so,strpos($so,$st)+strlen($st));
    $max = substr($so,0,strpos($so,$st));
    $so = substr($so,strpos($so,$st)+strlen($st));
    $st = ‘ms’;
    $mdev = substr($so,0,strpos($so,$st));
    $so = substr($so,strpos($so,$st)+strlen($st));
    return array($min, $avg, $max, $mdev);
    }

    An example:

    $websiteOrIP = “www.google.com”;
    $results = ping($websiteOrIP,4);
    echo(“Average ping time for “.$websiteOrIP.” was “.$results[1]);

    – Dan.

    Reply

Leave a Reply

Your e-mail address will not be published. Required fields are marked *

Are you Robot? *

For prompt technical support, please use our forum IntoFPV.com. I check blog comments weekly.