<?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>";

$StartTime = microtime($get_as_float);


for ($cnt=0; $cnt<$DBLoopMax; $cnt++)
 {
    
        $cxn = mysql_connect ($host, $user, $password)
                or die ('Could not connect to the database server' . mysql_error() );

    	mysql_select_db ($dbname, $cxn)
          	or die ("Unable to select database" . mysql_error());

	$query = "SELECT * FROM City";
	
	$result = mysql_query ($query, $cxn)
		or die ("Could not execute the query." . mysql_error());

    	$nrows = mysql_num_rows ($result);

	while ($row = mysql_fetch_assoc ($result))
	{
		$data1 = $row["CityName"];
	}

	mysql_free_result($result);


	mysql_close($cxn);
 }
    $EndTime = microtime($get_as_float);

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

?>