PHP 文件的锁定机制

来源:互联网 发布:网络与新媒体专业就业 编辑:程序博客网 时间:2024/05/02 13:55
<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>

原创粉丝点击