博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP文件锁定机制
阅读量:6964 次
发布时间:2019-06-27

本文共 1461 字,大约阅读时间需要 4 分钟。

<?php

//如果多用户访问一个文件,采用文件锁定机制
/*
flock()文件锁定
*/
header("Content-Type:text/html;charset=utf8");
$filename = "message.txt";

//如果用户提交了, 就写入文件, 按一定格式写入

if(isset($_POST['dosubmit'])) {
//字段的分隔使用||, 行的分隔使用[n]
$mess = "{$_POST['username']}||".time()."||{$_POST['title']}||{$_POST['content']}[n]";

writemessage($filename, $mess);

}

if(file_exists($filename)) {

readmessage($filename);
}

function writemessage($filename, $mess) {

$fp = fopen($filename, "a");
// LOCK_EX写入锁
// LOCK_NB防止阻塞
if(flock($fp, LOCK_EX+LOCK_NB)) {

fwrite($fp, $mess);

//LOCK_UN释放锁
flock($fp, LOCK_UN+LOCK_NB);

} else {

echo "写入锁定失败!";
}
fclose($fp);
}

function readmessage($filename) {

// $mess = file_get_contents($filename);

$mess = "";

$fp = fopen($filename, "r");

//读锁定LOCK_SH

flock($fp, LOCK_SH+LOCK_NB);
//检测是否到文件结尾
while(!feof($fp)) {
$mess.=fread($fp, 1024);
}

flock($fp, LOCK_UN+LOCK_NB); //释放

$mess = rtrim($mess, "[n]");

$arrmess = explode("[n]", $mess);

foreach($arrmess as $m) {

list($username, $dt ,$title, $content) = explode("||", $m);

echo "<b>{$username}</b>, ".date("Y-m-d H:i").": <i>{$title}</i>, <u>{$content}</u><br><hr><br>";

}

fclose($fp);

}

?>

<form action="message.php" method="post">

用户: <input type="text" name="username" value="" /><br>
标题:<input type="text" name="title" value="" /><br>
内容:<textarea name="content" cols="40" rows="4"></textarea><br>
<input type="submit" name="dosubmit" value="留言" /><br>
</form>

转载于:https://www.cnblogs.com/webforward/p/5342708.html

你可能感兴趣的文章
ipsec ***
查看>>
Ceph心跳与网络
查看>>
zabbix server 数据库迁移
查看>>
对接新通道的分析处理
查看>>
Linux01-bash脚本编程之七case语句及脚本选项进阶27
查看>>
Java记录 -11- 面向对象之封装续II
查看>>
Sybase Anywhere 8.0 DB数据库文件损坏的恢复
查看>>
hashMap理解
查看>>
ruby升级到1.9
查看>>
job.properties
查看>>
watchdog的加载方法
查看>>
我的友情链接
查看>>
C语言基础之类型系统
查看>>
jenkins+docker+nodejs项目的自动部署环境
查看>>
网游高层离职潮例行上演:多数选择创业
查看>>
赛门铁克 BE12.5备份exchange 2010 dag问题
查看>>
如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接
查看>>
mysql 导出数据
查看>>
2014-10-10 LAMP第一部分-环境搭建
查看>>
iPhone 4S
查看>>