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

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

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

网站锁定php文件命令,PHP文件的锁定机制相关推荐

  1. 服务器搜索文件命令,Centos文件搜索命令的讲解

    1.locate--->文件查找事先生成的数据库,模糊查找,updatedb更新locate数据库 -i:忽略文件名的大小写 -n:只显示前n行eg:locate-n3passwd 2.find ...

  2. 网站锁定php文件命令,PHP文件锁定读写的一点注意_php

    都说文本方式容易出现文件锁定失效等乱七八糟的问题. 其实并不是失效, 而是写法有些不对. 被 lock_ex 后的文件 再以read模式 fopen 的话将读到空内容!!! 如果没有判断就把它作操作后 ...

  3. linux中剪切文件命令,Linux文件处理常用命令操作技巧

    我是Linux初学者,做个笔记,以下是Linux几个常用文件处理命令: 命令提示符 [root@localhost~]# 其中: root                          表示当前登 ...

  4. linux查找iso文件命令,Linux文件查找命令find,xargs详述

    $ find /dev/rmt -print 三.xargs xargs - build and execute command lines from standard input 在使用find命令 ...

  5. linux手动同步文件命令,Linux文件同步命令rsync详解

    rsync:rsync [OPTION]... SRC DEST                 本机到本机 rsync [OPTION]... SRC [USER@]host:DEST     本机 ...

  6. linux新建文件加入运行,linux新建文件命令是什么_网站服务器运行维护,linux,新建文件...

    win10电脑怎么调出五笔输入法_网站服务器运行维护 win10电脑调出五笔输入法的方法是:1.首先打开系统菜单,找到区域和语言选项:2.然后依次点击[其他日期.时间和区域设置].[更换输入法]:3. ...

  7. 发送垃圾邮件的僵尸网络——药物(多)、赌博、股票债券等广告+钓鱼邮件、恶意下载链接、勒索软件+推广加密货币、垃圾股票、色情网站(带宏的office文件、pdf等附件)...

    卡巴斯基实验室<2017年Q2垃圾邮件与网络钓鱼分析报告> 米雪儿 2017-09-07 from:http://www.freebuf.com/articles/network/1465 ...

  8. expect脚本同步文件、 expect脚本指定host和要同步的文件 、 构建文件分发系统 、批量远程执行命令...

    为什么80%的码农都做不了架构师?>>>    20.31 expect脚本同步文件 使用expect脚本同步文件 说明:核心命令是rsync #! /usr/bin/expect ...

  9. linux系统下文件命令详解

    /etc 目录下包含的用户信息文件有: 3.1.0 passwd: 用户库文件 用户名 UID,GID 和工作目录都在此文件中 Shadow:存放用户口令的文件,每个用户的 口令加密后都放在此文件中 ...

最新文章

  1. 在网页中加入百度搜索条
  2. Windows 7防火墙设置详解(三)
  3. ROS学习笔记-使用C++类用以编程(以机器人语音交互为例)
  4. 【leetcode】Single Number (Medium) ☆
  5. (转)c# 扩展方法
  6. 从头学习计算机网络_我如何通过从头开始构建网络爬虫来自动进行求职
  7. 微机原理8086CPU
  8. python脚本自动统计excel_python脚本实现-excel二级统计
  9. 在Serverless Kubernetes集群中轻松运行Argo Workflow
  10. utools插件开发之监听按键的命令和状态
  11. StarCraft的工程师谈美国的游戏开发过程
  12. iOS Expected unqualified-id 和 Unkown type name 'NSString'
  13. c++ 如何获取移动硬盘_M.2 NVMe固态移动硬盘如此DIY,零难度+低成本+速度快
  14. Tomcat部分目录作用
  15. python时间序列分析——基于混沌和数据分形理论的特征构建
  16. 从电话网到IP互联网再到CDN
  17. J Infect (IF 38) | 韩国中央大学贾保磊等揭示人口腔微生物组中编码羊毛硫抗生素链球菌是肝脏疾病的潜在风险因子...
  18. tomcat端口占用极其简单解决办法
  19. Android Studio统一依赖管理Composing builds,2021最新网易Android面经
  20. Paper之EfficientDet: 《Scalable and Efficient Object Detection—可扩展和高效的目标检测》的翻译及其解读—续篇

热门文章

  1. c# 批量mqtt_Paho-MQTT C#接入示例
  2. Java:JDBC(Mysql)
  3. js+运行+php+文件,php中运行JS
  4. java 格式化 浮点数_DecimalFormat的用法 Java 浮点数 Float Double 小数 格式化 保留小数位后几位等...
  5. H5中 video 使用border-radius失效解决方法
  6. 学完Java后可从事的十大领域!
  7. Java 容器源码分析之 TreeMap
  8. 数字IC后端设计实现流程之floorplan及powerplan规划
  9. sv_labs学习笔记——sv_lab3(System Verilog)
  10. System Verilog面向对象编程(OPP)基础——类(class)的基本使用