关于 flock LOCK_NB的问题

在自己的VPS上部署了淘宝助手PHP代码,想每分钟去扫一下自己充值店的订单并发相应的邮件提醒,但不知怎么原因经常前一分钟的任务卡在那里还没有完成下一分钟的任务就已经开始,所以经常导致有多个扫描进程卡在那里,占用了偶稀有的VPS系统内存。

为此想到了PHP的flock函数,找到测试代码并改写如下用于测试:

<?php
$file = fopen("test.txt", "w+");
// 排它性的锁定
if (flock($file, LOCK_EX | LOCK_NB))
{
	fwrite($file, "Write something");
	sleep(10);
	// release lock
	flock($file, LOCK_UN);
	echo 'Done';
}
else
{
	echo "Error locking file!";
}
fclose($file);
?>

然后在Chrome浏览器里打开两个Tab分别浏览这个PHP文件,但执行结果总是都走fwrite那条线,折腾了很久总是不得要领,还有网上找了好多资料。

今天总算在这里找到解决办法,其实上面的代码已经解决了问题,只是使用的Chrome浏览器“请求两个相同页面的时候,其实是让一个去请求,另一个想坐享其成,所以产生了差异”,按前面看到的办法“用ctrl+F5强制刷新两个页面发起请求效果就出来了”。

Tags:

One Response to “关于 flock LOCK_NB的问题”

Leave a Reply


提醒: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。