网站锁定php文件命令,PHP文件的锁定机制

文件系统操作是在网络环境下完成的,可能有多个客户端用户在同一时刻读对服务器的同一个文件访问。如果有个用户正在向文件中写入数据,当还没有写完的时候,其他用户在这一时刻也向这个文件写入数据,这样就可能造成数据写入混乱。还有,当用户没有将数据写完时,其他用户读取这个文件的内容时,就会得到残缺的数据。

如何避免这样的情况发生,需要做到如下几点:

1)当有用户读取文件的时候,这个文件不能被写操作。可以同时多个用户对这个文件有读操作

2)当用户需要对这个文件进行写操作,不能读取这个文件。同时只能由一个用户对这个文件进行写操作。

PHP提供了flock()函数,可以对文件使用锁定操作,当一个进程访问一个文件的时会加上锁,只有等这个锁被释放之后,其他进程才可以对该文件进行访问。文件锁定有2种锁定类型:共享锁定和独占锁定。

共享锁定LOCK_SH:读文件的时候加的锁机制,同时有多个用户可以对这个文件加共享锁

独占锁定LOCK_EX:写数据的时候加的锁机制,只有这个文件所有的锁都被释放了才能加锁成功(即这个共享锁定和之前独占锁定都被释放),否则会出现锁定堵塞。

释放锁 LOCK_UN:释放锁定,无论是共享锁定还是独占锁定都用它释放。

读文件操作:

function readFileData($file)

{

$fp = fopen($file, 'r');

// 加入共享锁

flock($fp, LOCK_SH);

$buffer = '';

while(! feof($fp)) {

$buffer .= fread($fp, 1024);

}

// 关闭共享锁

flock($fp, LOCK_UN);

fclose($fp);

return $buffer;

}写文件操作:

function writeFileData($file, $model, $data)

{

$fp = fopen($file, $model);

// 获取独占锁

do {

$isLock = flocK($fp, LOCK_EX);

} while (! $isLock);

fwrite($fp, $data . '\n\r');

flock($fp, LOCK_UN);

fclose($fp);

return true;

}

writeFileData('test.txt', 'a', 'this is test');PHP文件操作函数总结

打开:fopen($filename, $model, (bool) include_file_path);

关闭:fclose($handle);

写:fwrite($handle , $data, [$length]); 这个函数的别名fputs

file_put_contents($filename, $data); 这个函数的功能和依次调用fopen,fwrite,fclose 功能一样,但是如果同时多次调用这个函数,文件只会保存最后写入的数据

读:fread file_get_contents fgets fgetc file readfile

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值