<?php 
/** 
 * This class show the effect of concurrance by accessing the same file from different parallel processes. 
 * log.txt will be managed by default php functions 
 * log2.txt will be managed by CuncurrentFile.php 
 *  
 * If you run this file, you will se that log.txt have less contents.  
 * * 
*/ 
error_reporting(E_ALL); 
include_once ("../ConcurrentFile.php"); 
 
define("FORKS", 5); // number of parallel processes 
define("SLEEP",10000); // amount of sleeping time of each process in microseconds 
 
$pid = getmypid(); 
$path = __FILE__; 
 
 
//--- multi-process managment 
$aCliOpts = getopt('a:'); 
if ($aCliOpts !== false) //it's a fork 
{ 
    $parent_pid = $aCliOpts['a']; 
} 
else //no, create some forks 
{     
    $parent_pid = "root"; 
    for ($i = 0; $i < FORKS; $i++) 
    { 
        execInBackground("php \"$path\" -a $pid"); 
    } 
} 
 
function execInBackground($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /b $cmd", "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    } 
}  
//-- end 
 
$content = "pid: $pid <= parent_pid: $parent_pid \n "; 
$content2 = file_get_contents("log.txt"); 
$file = new ConcurrentFile("log2.txt"); 
$file->writeLock(); 
$content2s = $file->read(); 
 
usleep(10000); 
 
$file->write($content.$content2s)->close(); 
file_put_contents("log.txt",$content.$content2); 
 
 
 
?>
 
 |