PHP benchmark script

Added: 08/03/2012 by Jeroen

Description

You can benchmark and compare different PHP versions with this script. Or use it to compare different hostingproviders!
Try to beat our server, every week a new benchmark is placed here

Requirements

- This script works on any PHP version

benchmark.php

Save the code below to a file named benchmark.php, and run it in your browser.
Note: The script can take a long tame on slow hosts.
<?php

/*
  PHP Benchmark
  Downloaded from: https://onlinephp.io
 */

class benchmark
{

    function 
benchmark()
    {

        
$totalTime 0;
        
$head str_pad("#"40"#");
        echo 
"<pre>$head\n|" str_pad("PHP BENCHMARK"38" "STR_PAD_BOTH) . "|\n$head\nStart : " date("m/d/Y H:i:s a") . "\nServer : {$_SERVER['SERVER_NAME']}@{$_SERVER['SERVER_ADDR']}\nPHP version : " PHP_VERSION "\nPlatform : " PHP_OS "\n$head\n";

        
$totalTime $totalTime $this->benchmark_Math();
        
$totalTime $totalTime $this->benchmark_StringManipulation();
        
$totalTime $totalTime $this->benchmark_Loops();
        
$totalTime $totalTime $this->benchmark_IfElse();


        echo 
str_pad("#"40"#") . "\n" str_pad("Total:"27) . " : " number_format($totalTime3) . " sec.</pre>";
    }

    function 
microtime_float()
    {
        list(
$usec$sec) = explode(" "microtime());
        return ((float) 
$usec + (float) $sec);
    }

    function 
benchmark_Math($runCount 150000)
    {
        
$startTime $this->microtime_float();
        
$functions = array("abs""acos""asin""atan""bindec""floor""exp""sin""tan",  "is_finite""is_nan""sqrt");
        for (
$i 0$i $runCount$i++) {
            foreach (
$functions as $function) {
                 @
call_user_func_array($function, array($i));
            }
        }
        
$time $this->microtime_float() - $startTime;
        echo 
str_pad("Math"27) . " : " number_format($time3) . " sec.\n";
        return 
$time;
    }

    function 
benchmark_StringManipulation($runCount 150000)
    {
        
$startTime $this->microtime_float();
        
$functions = array("addslashes""chunk_split""metaphone""strip_tags""md5""sha1""strtoupper""strtolower""strrev""strlen""soundex""ord");
        
$string "the quick brown fox jumps over the lazy dog";
        for (
$i 0$i $runCount$i++) {
            foreach (
$functions as $function) {
                 
call_user_func_array($function, array($string));
            }
        }
        
$time $this->microtime_float() - $startTime;
        echo 
str_pad("String Manipulation"27) . " : " number_format($time3) . " sec.\n";
        return 
$time;
    }

    function 
benchmark_Loops($runCount 10000000)
    {
        
$startTime $this->microtime_float();
        for (
$i 0$i $runCount; ++$i)
            ;
        
$i 0;
        while (
$i $runCount)
            ++
$i;
        
$time $this->microtime_float() - $startTime;
        echo 
str_pad("Loops"27) . " : " number_format($time3) . " sec.\n";
        return 
$time;
    }

    function 
benchmark_IfElse($runCount 10000000)
    {
        
$startTime $this->microtime_float();
        for (
$i 0$i $runCount$i++) {
            if (
$i == -1) {

            } elseif (
$i == -2) {

            } else if (
$i == -3) {

            }
        }
        
$time $this->microtime_float() - $startTime;
        echo 
str_pad("If/Else"27) . " : " number_format($time3) . " sec.\n";
        return 
$time;
    }

}

new 
benchmark();



detailed_benchmark.php

This is a more detailed version, it shows the run time per method. Credits to Paul Taulborg for this script:

<?php

// php benchmarker by Paul Taulborg (njaguar at https://forums.d2jsp.org) - Modified by Jeroen Post


$timer = new benchmarkTimer();


$head str_pad("#"36"#");

echo 
"<pre>" str_pad(' PHP ' PHP_VERSION ' BENCHMARK '36"#"STR_PAD_BOTH) . "\nStart : " date("m/d/Y H:i:s a") . "\nServer : {$_SERVER['SERVER_NAME']}@{$_SERVER['SERVER_ADDR']}\nPlatform : " PHP_OS "\nPHP version: ".phpversion()."\n$head\n";

$run_times 1000000;
$run_times_slow_function 10000;

$string_1 'bob & jim & tim & kim & me & you are &&&& =%"';
$string_2 '     what      ';
$string_3 strtoupper($string_1);
$string_4 '1234a';
$string_5 '64x32';
$string_6 'this is a link to https://google.com which is a really popular site';
$string_7 'number %d is like a string %s that likes to hex %x it out';
$string_8 $string_7 ' and then some';
$string_9 'quotes\'are "fun" to use\'. Most of the time. \\ ya';

$array_1 = array('a''b''c''d''e''f''g''h' => 1'i' => 2'j' => 0);
$array_2 = array('coffee''brown''caffeine');

$time_1 '12/29/2011 10:15:37pm';

$now time();


$timer->start();

for (
$i 0$i $run_times; ++$i)
    ;

$timer->stop('for');



$timer->start();

while (
$i 0)
    --
$i;

$timer->stop('while');



$timer->start();

for (
$i 0$i $run_times$i++) {

    
$z $i 4;

    if (
$z == 0) {
        
    } else if (
$z == 1) {
        
    } else if (
$z == 2) {
        
    } else {
        
    }
}

$timer->stop('if else');



$timer->start();

for (
$i 0$i $run_times$i++) {

    
$z $i 4;

    switch (
$z)
    {

        case 
0: break;

        case 
1: break;

        case 
2: break;

        default: break;
    }
}

$timer->stop('switch');



$timer->start();

for (
$i 0$i $run_times$i++) {

    
$z = ($i == 0);
}

$timer->stop('Ternary');



$timer->start();

for (
$i 0$i $run_times$i++)
    
str_replace('&''&amp;'$string_1);

$timer->stop('str_replace');



$timer->start();

for (
$i 0$i $run_times_slow_function$i++)
    
preg_replace("#(^|\s)(http[s]?://\w+[^\s\[\]\<]+)#i"'\1<a href="\2">\2</a>'$string_6);

$timer->stop('preg_replace');



$timer->start();

for (
$i 0$i $run_times$i++)
    
preg_match("#http[s]?://\w+[^\s\[\]\<]+#"$string_6);

$timer->stop('preg_match');



$timer->start();

for (
$i 0$i $run_times$i++)
    
count($array_1);

$timer->stop('count');



$timer->start();

for (
$i 0$i $run_times$i++) {

    isset(
$array_1['i']);

    isset(
$array_1['zzNozz']);
}

$timer->stop('isset');



$timer->start();

for (
$i 0$i $run_times$i++)
    
time();

$timer->stop('time');



$timer->start();

for (
$i 0$i $run_times$i++)
    
strlen($string_1);

$timer->stop('strlen');



$timer->start();

for (
$i 0$i $run_times$i++)
    
sprintf($string_7$i$string_5$i);

$timer->stop('sprintf');



$timer->start();

for (
$i 0$i $run_times$i++)
    
strcmp($string_7$string_8);

$timer->stop('strcmp');



$timer->start();

for (
$i 0$i $run_times$i++)
    
trim($string_2);

$timer->stop('trim');



$timer->start();

for (
$i 0$i $run_times_slow_function$i++)
    
explode('&'$string_1);

$timer->stop('explode');



$timer->start();

for (
$i 0$i $run_times$i++)
    
implode('&'$array_1);

$timer->stop('implode');



$f1 $timer->totalTime;

$timer->start();

for (
$i 0$i $run_times$i++)
    
number_format($f13);

$timer->stop('number_format');



$timer->start();

for (
$i 0$i $run_times$i++)
    
floor($f1);

$timer->stop('floor');



$timer->start();

for (
$i 0$i $run_times$i++)
    
strpos($string_2't');

$timer->stop('strpos');



$timer->start();

for (
$i 0$i $run_times$i++)
    
substr($string_110);

$timer->stop('substr');



$timer->start();

for (
$i 0$i $run_times$i++)
    
intval($string_4);

$timer->stop('intval');



$timer->start();

for (
$i 0$i $run_times$i++)
    (int) 
$string_4;

$timer->stop('(int)');



$timer->start();

for (
$i 0$i $run_times$i++) {

    
is_array($array_1);

    
is_array($string_1);
}

$timer->stop('is_array');



$timer->start();

for (
$i 0$i $run_times$i++) {

    
is_numeric($f1);

    
is_numeric($string_4);
}

$timer->stop('is_numeric');



$timer->start();

for (
$i 0$i $run_times$i++) {

    
is_int($f1);

    
is_int($string_4);
}

$timer->stop('is_int');



$timer->start();

for (
$i 0$i $run_times$i++) {

    
is_string($f1);

    
is_string($string_4);
}

$timer->stop('is_string');



$timer->start();

for (
$i 0$i $run_times$i++)
    
ip2long('1.2.3.4');

$timer->stop('ip2long');



$timer->start();

for (
$i 0$i $run_times$i++)
    
long2ip(89851921);

$timer->stop('long2ip');



$timer->start();

for (
$i 0$i $run_times_slow_function$i++)
    
date('F j, Y, g:i a'$now);

$timer->stop('date');



$timer->start();

for (
$i 0$i $run_times_slow_function$i++)
    
strftime('%B %e, %Y, %l:%M %P'$now);

$timer->stop('strftime');



$timer->start();

for (
$i 0$i $run_times_slow_function$i++)
    
strtotime($time_1);

$timer->stop('strtotime');



$timer->start();

for (
$i 0$i $run_times$i++)
    
strtolower($string_3);

$timer->stop('strtolower');



$timer->start();

for (
$i 0$i $run_times$i++)
    
strtoupper($string_1);

$timer->stop('strtoupper');



$timer->start();

for (
$i 0$i $run_times$i++)
    
md5($string_1);

$timer->stop('md5');



$timer->start();

for (
$i 0$i $run_times$i++) {

    unset(
$array_1['j']);

    
$array_1['j'] = 0;
}

$timer->stop('unset');



$timer->start();

for (
$i 0$i $run_times$i++)
    list(
$drink$run_timesolor$power) = $array_2;

$timer->stop('list');



$timer->start();

for (
$i 0$i $run_times$i++)
    
urlencode($string_1);

$timer->stop('urlencode');



$string_1e urlencode($string_1);

$timer->start();

for (
$i 0$i $run_times$i++)
    
urldecode($string_1e);

$timer->stop('urldecode');



$timer->start();

for (
$i 0$i $run_times$i++)
    
addslashes($string_9);

$timer->stop('addslashes');



$string_9e addslashes($string_9);

$timer->start();

for (
$i 0$i $run_times$i++)
    
stripslashes($string_9e);

$timer->stop('stripslashes');







echo 
$head "\n" str_pad("Total"23) . " : " number_format($timer->totalTime3) . " sec</pre>\n";

exit; 
// all done

class benchmarkTimer
{

    var 
$startTime;
    var 
$totalTime 0;

    function 
start()
    {
        
// use this method, because old php 4.x branches do not support the parameter to return a float
        
list($usec$string_ec) = explode(" "microtime());

        
$this->startTime = ((float) $usec + (float) $string_ec);
    }

    function 
stop($time_itle)
    {

        list(
$usec$string_ec) = explode(" "microtime());

        
$time = ((float) $usec + (float) $string_ec) - $this->startTime;



        echo 
str_pad($time_itle23) . " : " number_format($time5) . " sec\n";

        
$this->totalTime += $time;
    }

}

?>