<?php
$LoopMax = 20000000;
$DateLoopMax = 3000;
$FileReadLoopMax = 2000;
$FileMetaLoopMax = 9000;
$FileCopyLoopMax = 10000;
$EmptyFuncLoopMax = 1500000;
$StringIntLoopMax = 600000;
$EncryptionLoopMax = 2000;
$SysVarArrayLoopMax = 10000;
$StringAssignLoopMax = 7000000;
$ObjectsLoopMax = 350000;
$DBLoopMax = 1000; 

$get_as_float = true;

//Set page to reload to itself
if(isset($_SERVER['PHP_SELF'])) {
	$filename = substr($_SERVER['PHP_SELF'], strrpos($_SERVER['PHP_SELF'], "/") + 1);
	$PHP_SELF = $_SERVER['PHP_SELF'];
}


//------------------------------------------------------------------------------------------------+
echo "<table border='1' width='450px'><tr><td>&nbsp;&nbsp;Empty Loop Tests: ";
echo number_format($LoopMax)." Iterations</td></tr></table><br />";
$StartTime = microtime($get_as_float);

for ($cnt=0; $cnt<$LoopMax; $cnt++)
  {
  }
  
echo "<table border='0' width='450px'><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;For Loop</td><td>";  

$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime) ."<br />";
echo "</td></tr><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;While</td><td>";  

$StartTime = microtime($get_as_float);

$cnt = 0;
while ($cnt<$LoopMax) {
  	$cnt++;
  }

$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime) ."<br /></td></tr><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;Do While</td><td>";  

$StartTime = microtime($get_as_float);

$cnt = 0;
do
  {
  	$cnt++;
  }
 while ($cnt<$LoopMax); 
  
$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime) ."<br />";
echo "</td></tr></table><br />";

//------------------------------------------------------------------------------------------------+
echo "<table border='1' width='450px'><tr><td>&nbsp;&nbsp;String Assignment Tests: ";
echo number_format($StringAssignLoopMax)." Iterations</td></tr></table><br /><table border='0' width='450px'>";
echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;For Loop</td><td>";

$StartTime = microtime($get_as_float);

for ($cnt=0; $cnt<$StringAssignLoopMax; $cnt++)
  {
  	$MyString = "This is a test of string assignment.";
  }
  
$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime);
echo "</td></tr><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;While</td><td>"; 

$StartTime = microtime($get_as_float);

$cnt = 0;
while ($cnt<$StringAssignLoopMax)
  {
  	$MyString = "This is a test of string assignment.";
  	$cnt++;
  }
  
$EndTime = microtime($get_as_float);

echo  ($EndTime - $StartTime);  
echo "</td></tr><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;Do While</td><td>"; 

$StartTime = microtime($get_as_float);

$cnt = 0;
do
  {
  	$MyString = "This is a test of string assignment.";
  	$cnt++;
  }
 while ($cnt<$StringAssignLoopMax); 
  
$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime);  
echo "</td></tr></table><br />";

//------------------------------------------------------------------------------------------------+
echo "<table border='1' width='450px'><tr><td>&nbsp;&nbsp;Empty Function Calls: ";
echo number_format($EmptyFuncLoopMax)." Iterations</td></tr></table><br /><table border='0' width='450px'>";
echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;For Loop</td><td>";

$StartTime = microtime($get_as_float);

for ($cnt=0; $cnt<$EmptyFuncLoopMax; $cnt++)
  {
  	EmptyCall();
  }
  
$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime);

echo "</td></tr><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;While</td><td>"; 

$StartTime = microtime($get_as_float);

$cnt = 0;
while ($cnt<$EmptyFuncLoopMax)
  {
  	EmptyCall();
  	$cnt++;
  }
  
$EndTime = microtime($get_as_float);
echo ($EndTime - $StartTime);  
echo "</td></tr><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;Do While</td><td>";
 
$StartTime = microtime($get_as_float);

$cnt = 0;
do
  {
  	EmptyCall();
  	$cnt++;
  }
 while ($cnt<$EmptyFuncLoopMax); 
  
$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime);  

function EmptyCall()
{
}

echo "</td></tr></table><br />";

//------------------------------------------------------------------------------------------------+
echo "<table border='1' width='450px'><tr><td>&nbsp;&nbsp;String & Integer Tests: ";
echo number_format($StringIntLoopMax)." Iterations</td></tr></table><br />";
echo "<table border='0' width='450px'><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;For Loop</td><td>";

$StartTime = microtime($get_as_float);

$string1 = 'abcdefghij';

for ($cnt=0; $cnt<$StringIntLoopMax; $cnt++)
{
	$x=$cnt * 5;
	$x=$x + $x;
	$x=$x/10;
	$string3 = $string1 . strrev($string1);
	$string2 = substr($string1, 9, 1) . substr($string1, 0, 9);
	$string1 = strtoupper($string2);
}

$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime);  

echo "</td></tr></table><br />";

//------------------------------------------------------------------------------------------------+
echo "<table border='1' width='450px'><tr><td>&nbsp;&nbsp;Encryption Tests: ";
echo number_format($EncryptionLoopMax)." Iterations</td></tr></table><br />";
echo "<table border='0' width='450px'><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;For Loop</td><td>";

$string2 = "This is a test string to see how fast your web server can process PHP functions";

$StartTime = microtime($get_as_float);

for ($cnt=0; $cnt<$EncryptionLoopMax; $cnt++)
 {
	$md5 = md5($string2);
	$sha1 = sha1($md5);
	$crc32 = crc32($sha1);
	$cryptDate = crypt($crc32);
}

$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime); 
 
echo "</td></tr></table><br />";

//------------------------------------------------------------------------------------------------+
echo "<table border='1' width='450px'><tr><td>&nbsp;&nbsp;Date Function Tests: ";
echo number_format($DateLoopMax)." Iterations</td></tr></table><br />";
echo "<table border='0' width='450px'><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;For Loop</td><td>";

$StartTime = microtime($get_as_float);

for ($cnt=0; $cnt<$DateLoopMax; $cnt++)
 {
	$string3 = date("D M d Y"). ', News Years Day : ' .date("M-d-Y", mktime(0, 0, 0, 1, 1, 1998));
	$secNextWeek = time() + (7 * 24 * 60 * 60);
	date('Y-m-d', $secNextWeek);
}

$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime);  
echo "</td></tr></table><br />";

//------------------------------------------------------------------------------------------------+
echo "<table border='1' width='450px'><tr><td>&nbsp;&nbsp;SysVar & Array Tests: ";
echo number_format($SysVarArrayLoopMax)." Iterations</td></tr></table><br />";
echo "<table border='0' width='450px'><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;For Loop</td><td>";

$StartTime = microtime($get_as_float);

for ($cnt=0; $cnt<$SysVarArrayLoopMax; $cnt++)
 {
	$array = $_SERVER;
	shuffle($array);
	foreach ($array as $value) {
		ucfirst($value);
	}
	arsort($array);
}

$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime);  
echo "</td></tr></table><br />";


//------------------------------------------------------------------------------------------------+
echo "<table border='1' width='450px'><tr><td>&nbsp;&nbsp;File System Tests: ";
echo "</td></tr></table><br />";
echo "<table border='0' width='450px'>";

echo" <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;File Read Loop</td><td>";

$StartTime = microtime($get_as_float);

for ($cnt=0; $cnt<$FileReadLoopMax; $cnt++)
 {
	//Subtest 1 - reading files
	$dataFile = fopen( $filename, "r" ) ;
	if($dataFile) {
		while (!feof($dataFile)) {
			$buffer = fgets($dataFile, 4096);
	   }
	   fclose($dataFile);
	}
	else {
	   die( "fopen failed for $filename" ) ;
	}
}

$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime);  
echo "&nbsp;&nbsp;&nbsp;&nbsp;(".number_format($FileReadLoopMax)." Iterations)</td></tr>";
echo" <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;Metadata Read Loop</td><td>";
$StartTime = microtime($get_as_float);

for ($cnt=0; $cnt<$FileMetaLoopMax; $cnt++)
 {
	$filesize = @filesize($filename);
	$isreadable = @is_readable($filename);
	$iswritable = @is_writable($filename);
	$df = @disk_free_space("/");
 }

$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime); 
echo "&nbsp;&nbsp;&nbsp;(".number_format($FileMetaLoopMax)." Iterations)</td></tr>";
echo" <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;File Copy Loop</td><td>";
$file2 = "junk.php";
$StartTime = microtime($get_as_float);

for ($cnt=0; $cnt<$FileCopyLoopMax; $cnt++)
 {

		$copy = @copy($filename, $file2);
		if(!$copy) {
			//echo "failed to copy $filename...\n";
		} else {
			unlink($file2);
		}
 }

$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime); 
echo "&nbsp;&nbsp;&nbsp;(".number_format($FileCopyLoopMax)." Iterations)</td></tr>";
echo "</table><br />";


//------------------------------------------------------------------------------------------------+
echo "<table border='1' width='450px'><tr><td>&nbsp;&nbsp;Objects Tests: ";
echo number_format($ObjectsLoopMax)." Iterations</td></tr></table><br />";
echo "<table border='0' width='450px'><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;For Loop</td><td>";

$StartTime = microtime($get_as_float);

class Foo {
	var $z;
	function Foo($var) {
		$this->z = $var;
	}
	function do_foo() {
       return $this->z;
    }
	function multiply($var1, $var2) {
		return ($var1 * $var2);
	}
}

for ($cnt=0; $cnt<$ObjectsLoopMax; $cnt++)
 {
 	$bar = new Foo("Hello world!");
	$_1 = $bar->do_foo();
	$_2 = $bar->multiply(72, 12);
 }

$EndTime = microtime($get_as_float);

echo ($EndTime - $StartTime);  
echo "</td></tr></table><br />";


//------------------------------------------------------------------------------------------------+
	$host="localhost:3306";
	$user="root";
	$password="";
	$dbname="test";
    //------------------------------------------------------------------------------------------------+
echo "<table border='1' width='450px'><tr><td>&nbsp;&nbsp;DataBase Tests: ";
echo number_format($DBLoopMax)." Iterations</td></tr></table><br />";
echo "<table border='0' width='450px'><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;For Loop</td><td>";


$conn = pg_connect("host=localhost port=5432 dbname=test user=postgres password=P@ssw0rd");
$sql = "SELECT * FROM perfdata.city AS today;";
$result = pg_query($conn, $sql);
$numrows = pg_numrows($result);
$row = pg_fetch_object($result, 1);
$StartTime = microtime($get_as_float);


for ($cnt=0; $cnt<$DBLoopMax; $cnt++)
 {
  
  $sql = "SELECT * FROM perfdata.city AS today;";
$result = pg_query($conn, $sql);
$numrows = pg_numrows($result);
$row = pg_fetch_object($result, 1);

   // Loop on rows in the result set.

   for($ri = 0; $ri < $numrows; $ri++)
    {
    $row = pg_fetch_array($result, $ri);
    $city = $row["CityName"];
   }  
 }
 
    $EndTime = microtime($get_as_float);

       pg_close($conn);   
echo ($EndTime - $StartTime);  
echo "</td></tr></table><br />";

?>