PHP flock():文件锁
文件锁,顾名思义就是对文件上锁。前面我们在介绍《向文件中写入数据》时,同一时刻只有一个单独的用户在操作文件,这样是没有问题的。但是如果两个或者更多用户同时操作同一文件的话,程序就会出现错误。解决这种问题的方法就是,在使用 PHP 向文件中写入时,暂时锁定该文件。
通过学习《file_put_contents() 函数》我们知道,可以通过在 file_put_contents() 函数的第三个参数中设置“LOCK_EX”来为文件加锁。但如果我们使用 fopen()、fwrite()、fclose() 等函数来操作文件的话,就需要在打开文件之后使用 flock() 函数来为文件加锁了。
flock() 函数的语法格式如下:
通过学习《file_put_contents() 函数》我们知道,可以通过在 file_put_contents() 函数的第三个参数中设置“LOCK_EX”来为文件加锁。但如果我们使用 fopen()、fwrite()、fclose() 等函数来操作文件的话,就需要在打开文件之后使用 flock() 函数来为文件加锁了。
flock() 函数的语法格式如下:
flock(resource $handle, int $operation[, int &$wouldblock])
参数说明如下:- $handle:文件系统指针,即使用 fopen() 创建的文件资源;
-
$operation:文件锁类型,可以是以下值之一:
- LOCK_SH 取得共享锁定(读取的程序);
- LOCK_EX 取得独占锁定(写入的程序);
- LOCK_UN 释放锁定(无论共享或独占);
- 如果不希望 flock() 在锁定时堵塞,则可以在 $operation 中添加 LOCK_NB 参数(Windows 上还不支持)。
- $wouldblock:可选参数,如果希望文件锁定时堵塞其它进程,则可以将该参数设置为 1 或 true。(Windows 上不支持)
提示:使用 flock() 函数不仅可以为文件加锁,好可以解锁文件。
【示例】使用 flock() 函数为文件加锁。<?php $file = fopen('./test.txt','w+'); if(flock($file, LOCK_EX|LOCK_NB)){ fwrite($file, '新宝库'.date('Y-m-d H:i:s', time())); flock($file, LOCK_UN); }else{ echo "string"; } fclose($file); ?>
提示:如果使用了 flock() 函数对文件进行了加锁操作,那么当调用 fclose() 函数时,文件会自动解锁,但最好还是在文件写入完成后加上解锁语句。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算