你问的是 php 的问题吗?看你的描述似乎不是因为 php 不会出现你说的现象。
被 flock 锁定的文件可被 fclose 解锁,而 fclose 会在程序结束时隐式的调用
何况 php 的 flock 是咨询方式的,也就是说锁定是相对 php 程序而言的。并不限制非 php 程序的访问
被 flock 锁定的文件可被 fclose 解锁,而 fclose 会在程序结束时隐式的调用
何况 php 的 flock 是咨询方式的,也就是说锁定是相对 php 程序而言的。并不限制非 php 程序的访问
解决方案 »
- php或者js如何通过一个网址把该网址的图片显示到我的页面上
- 数据库怎么取得上一次添加记录的id
- 紧急求助:我做的个从数据读取数据 实现产品大小类的联动 第二个下拉列表 怎么没有内容
- 想用SESSION保护多个网页
- 一个很奇怪的伪静态问题,获取不到参数
- 没分了,江湖救急!! 如何将 "abc#123\#456" split成数组[abc, 123\#456]
- 能插进去英文却插不进去中文
- mysql_error()函数如果执行的话,每次都显示千篇一律的内容吗
- 如何验证url
- 请问各位老大有没有好点的相册程序啊??
- php后台添加文章,生成新文章页面是怎么实现的啊?
- 本人新手,初学PHP,有些问题还望解答……
lock("test.txt");
lock("test.txt"); // 因为某种原因导致又错误的锁了一次, 导致造成死锁, 这时候就算关闭网页, 那个test.txt文件也无法被其他任何进程写入 function lock($name){
if(!file_exists($name)){
if(!$_file=fopen($name,"a+")) return false;
fclose(_file);
}
if(!$_file=fopen($name,"r+")) return false;
fseek($_file,0,SEEK_SET);
flock($_file,LOCK_EX);
}
?>
你的问题可能是 session 引起的
$file=new obj("test.txt",true);
$file1=new obj("test.txt",true);class obj{
var $_file=0;
function obj($name,$lock=false){
if(!file_exists($name)){
if(!$this->_file=fopen($name,"a+")) return false;
fclose($this->_file);
}
if(!$this->_file=fopen($name,"r+")) return false; flock($this->_file,LOCK_EX);
}
}
?>
如果在class里用了成员保存打开的句柄,就会会导致这种情况,就算客户关闭浏览器,那个文件依旧被占用,无法释放
$file=new obj("test.txt",true);
$file1=new obj("test.txt",true);class obj{
var $_file=0;
function obj($name,$lock=false){
global $LOCK;
if(!is_array($LOCK)) $LOCK=[];
if(isset($LOCK[$name])) return true;
if(!file_exists($name)){
if(!$this->_file=fopen($name,"a+")) return false;
fclose($this->_file);
}
if(!$this->_file=fopen($name,"r+")) return false; flock($this->_file,LOCK_EX);
}
}
?>