我是靠谱客的博主 单薄航空,最近开发中收集的这篇文章主要介绍php 锁的机制_php文件的锁定机制 - youthflies的个人空间 - OSCHINA - 中文开源技术交流社区...网络留言板,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如果要并发读取、写入一个文件,就要对文件加锁,防止读、写混乱,造成结果有误,php使用函数 bool flock(int handle, int operation, int &wouldlock)函数对文件加锁

,详细如下面的例子:

留言板

/**

* 如果需要并发读取某文件,问了防止读写混乱,就要对打开的文件加锁

* bool flock(int handle, int operation, int &wouldblock)函数可以对文件加锁

* handle是一个文件指针,operation指定锁的类型,锁的类型包括:

* LOCK_SH 共享锁,读取文件时使用

* LOCK_EX 独占锁,写入文件时使用

* LOCK_UN 释放锁,上面两种锁都用它来释放(ps:当文件被fclose()掉后,锁也会被释放)

* LOCK_NB 附加锁,不过不希望flock()在锁定时堵塞,就应该在上面锁定后,再加上该锁

* 锁定阻塞是指已经被flock()锁定的文件,再次被flock()时,flock()函数就会挂起,解决方法除了

* 上面加上附加锁,还可以指定第三个参数wouldblock为1,意思是当文件锁定时会阻挡其他进程。

*/

echo "

网络留言板

";

$fileName = "guestbook.txt";

//调用自定义函数,读取留言板中的消息

if(file_exists($fileName))

readMessage($fileName);

//如果用户提交了留言,就调用自定义函数,写入到留言板中

if(isset($_POST['submitBtn']))

writeMessage($fileName, $_POST['username'] . $_POST['title'] . $_POST['content']);

function readMessage($fileName)

{

$fileHandle = fopen($fileName, "r");

flock($fileHandle, LOCK_SH);

$allMessages = "";

//循环读取文件中的留言

while(!feof($fileHandle))

$allMessages .= fgets($fileHandle);

$messageArray = explode("|", $allMessages);

foreach ($messageArray as $message)

{

echo $message . "
";

}

flock($fileHandle, LOCK_UN);

fclose($fileHandle);

}

//写入留言板

function writeMessage($fileName, $message)

{

$fileHandle = fopen($fileName, "a");

flock($fileHandle, LOCK_EX);

$message .= "|";

fwrite($fileHandle, $message) or die("留言写入失败");

flock($fileHandle, LOCK_UN);

fclose($fileHandle);

}

/**

* 如果要防止锁定阻塞,可以附加LOCK_NB锁

* flock($fileHandle, LOCK_EX+LOCK_NB);

* flock($fileHandle, LOCK_UN+LOCK_NB);

*/

?>

昵称:

标题:

留言:请输入留言

最后

以上就是单薄航空为你收集整理的php 锁的机制_php文件的锁定机制 - youthflies的个人空间 - OSCHINA - 中文开源技术交流社区...网络留言板的全部内容,希望文章能够帮你解决php 锁的机制_php文件的锁定机制 - youthflies的个人空间 - OSCHINA - 中文开源技术交流社区...网络留言板所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部