PHP文件锁测验

 PHP的锁大致是两种用法,一个是在WEB并发比较高的情况下的一些写操作可能需要加锁,这可能也是php锁最原始的使用方法。另外一种就是非阻塞的一种用法,比如已经有其它进程取得了这个锁本进程直接退出。

 

本文其实就是对PHP函数flock的一个调用实验。

 
步骤1: 创建一个lock.php文件, 写入代码如下,测试不加锁的情况下的输出。
 <?php
class PHPLock
{
	protected $_lockfile = "lock";
	protected $_handler = null;

	function __construct()
	{
		$this->_handler = fopen($this->_lockfile, "w");
	}

	function getLock()
	{
		return flock($this->_handler, LOCK_EX);
	}

	function freeLock()
	{
		return flock($this->_handler, LOCK_UN);
	}
}

$groupNum = 10;
$groupSize = 10;
$groupName = $argv[1];

$lock = new PHPLock();

for($group_i = 0; $group_i < $groupNum; $group_i ++) {
	//$lock->getLock();
	echo "++++++++++++++++++++++++++++++++++++++++++++++++++++\n";
	for($i = 0; $i < $groupSize; $i++) {
		echo $groupName, ":", $group_i * $groupSize + $i, "\n";
		usleep(100000 * rand(0, 100) / 100);
	}
	echo "--------------------------------------------------\n";
	//$lock->freeLock();
}
步骤2: 创建一个start.sh的shell脚本,写入如下代码
php lock.php http://www.zeroplace.cn/#g1 &
php lock.php http://www.zeroplace.cn/#g2 &
执行这个start.sh脚本,查看输出,发现有这样的情况(分组被破坏)。
步骤3: 把lock.php的30和37行的注释去掉,再执行start.sh脚本,发现分组全部没有被破坏。
 

 



文章来自: 本站原创
Tags:
评论: 0 | 查看次数: 4938