PHP 文件的锁定机制

<html>
<head>
<title>文件的锁定机制</title>
</head>
<body>
<?php
//文件的锁定机制
//flock() 对文件进行锁定
$filename="message.txt"; //声明一个变量保存文件名,在这个文件中保存留言信息
if(isset($_POST['sub'])){ //判断用户是否点击了提交按钮
//接收表单中的三条内容,并整合为一条
$message=$_POST['username']."||".$_POST['title']."||".$_POST['message']."<|>";
writeMessage($filename,$message); //用自定义的函数写入文件中
}
if(file_exists($filename)){ //判断文件存在时,则调用自定义函数来读取数据
readMessage($filename);
}
function writeMessage($filename,$message){ //自定义一个向文件中写入数据的函数
$f_handle=fopen($filename,'a'); //以追加的模式打开文件
if(flock($f_handle,LOCK_EX)){ //进行排他型锁定(独占锁定)
fwrite($f_handle,$message); //将数据写入文件
flock($f_handle,LOCK_UN); //释放文件锁定
}else{
echo "不能锁定文件"; //如果锁定失败,输出错误信息
}
}
function readMessage($filename){ //自定义一个遍历读取文件的函数
$fp=fopen($filename,"r") or die("文件读取失败"); //以只读的模式打开文件
flock($fp,LOCK_SH); //建立文件的共享锁定
$buffer=""; //将文件中的数据遍历后放入到这个字符串中
while(!feof($fp)){ //使用while循环将文件中的内容遍历出来
$buffer.=fread($fp,1024); //将文件中的内容追加到$buffer变量中
}
$data=explode("<|>",$buffer); //使用分隔符将每条留言分隔开并存入到数组中
foreach($data as $line){ //遍历数组将每行留言内容以HTML输出
$message=explode("||",$line);
if($message[0]!="" && $message[1]!="" && $message[2]!=""){
echo $message[0]."说:";
echo '&nbsp;'.$message[1];
echo $message[2]."<hr>";
}
}
flock($fp,LOCK_UN); //释放文件的锁定
fclose($fp);
}
?>
<form action="" method="post">
<label>用户名:</label><input type="text" size="30" name="username" /><br><br>
<label>标&nbsp;&nbsp;题:</label><input type="text" size="30" name="title" /><br><br>
<label>内&nbsp;&nbsp;容:</label><textarea rows="4" cols="38" name="message">请在此处填写留言内容</textarea>
<input type="submit" name="sub" value="留言" />
</form>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值