php中文件锁函数flock函数用法简介

文件锁阻止PHP脚本并发执行 这个标题不知取的是否恰当。 前段时间在工作中,需要做两个定时任务,每隔5分钟执行一次,触发不同的业务逻辑。如果不考虑定时,任务可以当作普通的业务脚本执行即可,但是一考虑了定时任务,就要注意,如果任务已经触发,如何避免当前任务未执行完成,下一个定时器又触发,导致部分数据被重复操作。 例如当前需处理十条数据,处理前先对数据库进行查找操作取出存储在数组内轮询,在执行到第五条时,脚本又被定时器触发了,... 阅读详情
php中文件锁函数flock函数用法简介: 
语法: 
bool flock ( int $handle , int $operation [, int &$wouldblock ] ) 
flock() 操作的 handle 必须是一个已经打开的文件指针。operation 可以是以下值之一: 
1. 要取得共享锁定(读取程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1) 
2. 要取得独占锁定(写入程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2) 
3. 要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3) 
4. 如果你不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4) 
看下面代码: 
a.php 
<?php 
$file = "temp.txt"; 
$fp = fopen($file , 'w'); 
if(flock($fp , LOCK_EX)){ 
fwrite($fp , "abc"); 
sleep(10); 
fwrite($fp , "123"); 
flock($fp , LOCK_UN); 
} 
fclose($fp); 
?> 
b.php 
<?php 
$file = "temp.txt"; 
$fp = fopen($file , 'r'); 
echo fread($fp , 100); 
fclose($fp); 
?> 
运行 a.php 后,马上运行 b.php ,可以看到输出: 
abc 
等 a.php 运行完后运行 b.php ,可以看到输出: 
abc 
123 
显然,当 a.php 写文件时数据太大,导致时间比较长时,这时 b.php 读取数据不完整,在对b.php做修改 
修改 b.php 为: 
<?php 
$file = "temp.txt"; 
$fp = fopen($file , 'r'); 
if(flock($fp , LOCK_EX)){ 
echo fread($fp , 100); 
flock($fp , LOCK_UN); 
} else{ 
echo "Lock file failed..."; 
} 
fclose($fp); 
?> 
运行 a.php 后,马上运行 b.php ,可以发现 b.php 会等到 a.php 运行完成后(即 10 秒后)才显示: 
abc 
123 
读取数据完整,但时间过长,他要等待写锁释放,再对b.php做修改。 
修改 b.php 为: 
<?php 
$file = "temp.txt"; 
$fp = fopen($file , 'r'); 
if(flock($fp , LOCK_SH | LOCK_NB)){ 
echo fread($fp , 100); 
flock($fp , LOCK_UN); 
} else{ 
echo "Lock file failed..."; 
} 
fclose($fp); 
?> 
运行 a.php 后,马上运行 b.php ,可以看到输出: 
Lock file failed… 
证明可以返回锁文件失败状态,而不是向上面一样要等很久。 
结论: 
建议作文件缓存时,选好相关的锁,不然可能导致读取数据不完整,或重复写入数据。 
file_get_contents 好像选择不了锁,不知道他默认用的什么锁,反正和不锁得到的输出一样,是不完整的数据。
PHP实现文件加锁的方法 - 使用flock函数 共享锁允许多个进程同时对文件进行读操作,而独占锁则只允许一个进程对文件进行写操作。通过使用flock函数,我们可以实现在PHP中对文件进行加锁的功能。在实际应用中,根据需要进行适当的错误处理和等待策略,以确保获取锁的成功率和系统的稳定性。文件加锁的概念是在对文件进行操作时,通过获取锁的方式来确保同一时间只有一个进程或线程可以访问该文件。除了独占锁外,还可以使用共享锁对文件进行加锁。共享锁允许多个进程同时对文件进行读操作,适用于多个进程需要同时读取文件内容的场景。希望本文对您理解PHP中的文件加锁有所帮助。 阅读详情

相关推荐

PHP使用flock函数实现文件加锁的方法

文件加锁是在多进程或多线程环境下对文件进行访问控制的一种常见技术。本文将详细介绍如何使用flock函数进行文件加锁,并提供相应的源代码示例。需要注意的是,文件加锁只对同一个操作系统有效,不同操作系统之间的文件加锁行为可能会有所差异。此外,文件加锁只能控制同一进程或线程内的文件访问,对于不同进程或线程之间的文件访问无法进行控制。通过使用文件加锁技术,可以确保在同一时刻只有一个进程或线程对文件进行操作,从而避免数据竞争和冲突。通过合理地使用文件加锁技术,可以确保在多进程或多线程环境下对文件进行安全的访问控制。

DsJustintime的博客 160

php中flock函数,phpflock函数_PHP教程

flock在php中的作用是操作文件时锁定文件,只取取消锁定时才可用。flock在php中的作用是操作文件时锁定文件,只取取消锁定时才可用。flock( PHP 4中, PHP 5中)flock-便携式咨询文件锁定描述布尔群(资源$处理,诠释$操作[摘要& $ wouldblock ] )flock( )可让您执行一个简单的读卡器/写模式,它可以用在几乎所有平台(包括大多数Unix衍生物甚至Win...

weixin_42511157的博客 607

PHP文件锁

PHP文件锁...

wgchen 1040

php flock原理,php flock()函数使用实例及分析

php flock()介绍flock — 轻便的咨询文件锁定语法:bool flock ( resource $handle , int $operation [, int &$wouldblock ] )flock() 允许执行一个简单的可以在任何平台中使用的读取/写入模型(包括大部分的 Unix 派生版和甚至是 Windows)。在 PHP 5.3.2版本之前,锁也会被 fcl...

weixin_30774211的博客 339

PHP flock 文件锁详细介绍

脚本之家小编今天将为大家详解关于php中文件锁函数flock函数用法简介,希望通过本文的介绍大家对于Linux方面能够更加的了解

【计算机图形学】Pov-Ray画的垃圾小车

效果: 代码: #include "colors.inc" #include "metals.inc" #include "glass.inc" //相机 //这个位置车子刚好落在草地上了 camera { location direction z*1.5 right x*image_width/image_height look_at

lishichengyan的博客 1749

php中flock函数,详解PHP flock() 函数的使用

一、使用示例不阻塞文件锁定,如果锁定失败,则单独处理相应逻辑$handle = fopen("j:/test.txt","r+"); //读写方式打开文件if ( $handle ) {$lock = true; //windows 平台该参数无效if( flock($handle, LOCK_SH | LOCK_NB ,$lock) ) { //使用共享锁定,其他请求可以直接进入,LOCK_NB...

weixin_26913055的博客 648

【AirSim+PX4】WSL2上运行PX4连接Airsim步骤

在 Linux 命令行中输入以下命令以添加(或改变)环境变量。注意,此处的 IP 地址应为。4.启动 sln 文件的调试以进入 UE4 编辑器,并在 Linux 中启动 PX4。

m0_53538421的博客 1505

flock用法详解 linux_linux使用flock文件锁

使用linux flock 文件锁实现任务锁定,解决冲突格式:flock [-sxun][-w #] fd#flock [-sxon][-w #] file [-c] commandflock --helpflock (util-linux-ng 2.17.2)Usage: flock [-sxun][-w #] fd#flock [-sxon][-w #] file [-c] command.....

weixin_39663729的博客 1060

基于STM32的RS485土壤氮磷钾与PH传感器数据采集与OLED显示实战(附完整代码)

本文详细介绍了基于STM32单片机通过RS485协议采集土壤氮磷钾与PH传感器数据的实战项目。涵盖硬件选型、连接方法、Modbus-RTU通信协议解析、STM32程序实现及OLED显示,提供完整代码和调试技巧,适用于农业物联网环境监测系统。

kotlin6android的博客 334

整车电检工艺流程

本文是笔者在从事汽车行业智能制造领域过程,对于整车电检工艺流程的理解与总结。

qq_40664711的博客 1万+

php flock文件锁通俗讲解几种锁的用法

使用共享锁(读锁)LOCK_SH,如果是读取,不需要等待,但如果是写入,需要等待读取完成。 使用独占锁也叫排它锁(写锁)LOCK_EX,无论写入/读取都需要等待。 LOCK_UN,无论使用共享/读占锁,使用完后需要解锁。 LOCK_NB,当被锁定时,不阻塞,而是提示锁定,直接拒绝 理解PHP文件锁关键是理解LOCK_SH和L...

大林的博客 818

总目录- AutoSAR从入门到精通实战系列课程【持续更新中...】

欢迎大家订阅《AutoSAR入门和实战系列》,开始前博主先列出AutoSAR学习的大纲,同时这也可以作为大家学习AutoSAR的参考。想学习和及以及的同学们,可以订阅本博客,本博客一直持续更新中。如果想深入或从本质上学习和理解AutoSAR,打开此链接后,,点击左下方【立即订阅】订阅专栏!!!】......

4万+

flock用法详解 linux_flock函数介绍与使用方法详解

本文主要和大家分享php使用flock阻塞和非阻塞写入文件方法对比。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。阻塞写入代码:(所有程序会等待上次程序执行结束才会执行,30秒会超时)...

weixin_35890888的博客 2867

LVGL 9Text Area 控件 (lv_textarea) 使用指南

是一个可编辑的文本输入控件,通常用于在用户界面中输入和编辑多行或单行文本。该控件支持文本插入、删除、光标控制、文本选择、密码输入等功能。它的文本内容可以通过键盘、API 或事件进行修改,还可以设置最大文本长度、占位符文本和密码模式等。是一个强大且灵活的文本输入控件,适用于多种用户输入场景,支持文本插入、删除、光标控制、密码输入等功能。通过 LittlevGL 提供的丰富 API,开发者可以自定义文本区域的外观和行为,实现复杂的文本输入需求。

m0_62599305的博客 1673

QLineEdit控件: 实现IP地址输入框(基于编辑信号)

在开发网络应用程序时,经常需要用户输入IP地址。直接使用普通输入框容易导致格式错误,用户体验也较差。本文将手把手教你用Qt的QLineEdit控件实现一个智能IP地址输入框。即使你是刚接触Qt的新手,也能通过本文理解核心实现原理。

u011186532的专栏 649

PHP文件锁解析 flock()

1、普通写入和读取 b.php写入 $file = 'tt.txt'; $fp = fopen($file,'a+b'); fwrite($fp,"c"); sleep(3); fwrite($fp,"a"); c.php读取 $file = 'tt.txt'; $fp = fopen($file,'rb'); echo fread($fp,1000); fc

fangzy0112的专栏 2036

PCB仿真软件:Altium Designer_(18).PCB设计中的热管理

在PCB设计中,热管理是一个至关重要的环节。随着电子设备的集成度越来越高,功耗和发热量也随之增加,不合理的热设计可能导致电路板过热,从而影响电路的性能和可靠性。热管理不仅能够提高电路板的使用寿命,还能确保电路在各种环境条件下的稳定工作。本节将详细介绍如何在Altium Designer中进行有效的热管理,包括热分析、热设计和热仿真等关键步骤。

kkchenjj的博客 1985

PHP中文件锁的使用详解

PHP文件锁是一种用于控制对文件的并发访问的机制。它可以确保同一时间内只有一个进程或线程可以对文件进行读取或写入操作,以避免数据竞争和冲突。在PHP中,可以使用flock函数来实现文件锁。flock函数可以在指定的文件上加锁或解锁,确保在加锁期间其他进程或线程无法对该文件进行访问。常用的锁定参数有两种类型:共享锁(Shared Lock):多个进程可同时获取共享锁,用于读取文件内容,不允许其他进程获取独占锁或写入操作。

菜鸟教程 139

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

PHP flock文件锁详解介绍

PHP flock文件锁详解介绍 www.111cn.net 编辑:angel 来源:转载 为了确保操作的有效性和完整性,可以通过锁机制将并发状态转换成串行状态。作为锁机制中的一种,PHP的文件锁也是为了应对资源竞争。假设一个应用场景,在存在较大并发的情况下,通过fwrite向文件尾部多次有序的写入数据,不加锁的情况下会发生什么?多次有序的写入操作相当于一个事务,我们此时需要保证这个事务的

可克技术 2922

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

php多进程读写同一个文件锁的问题及flock详解

php是原生支持多进程编程的,可以利用pcntl_fork()在当前位置产生一个子进程,那么就可能存在多个进程读写同一个文件的问题,比如多进程程序读写同一个日志文件,这样就有必要解决读写同一个文件时加锁的问题,php已经内置了一个读写的文件锁方法flock,,官方的解释是轻便的文件咨询锁定,这很官方。 还是先看一个栗子吧: <?php $fp = fopen("logs/app.

zhang197093的博客 1万+

PHP开发原子操作,文件锁flock,数据库事务详细解析

  php原子操作,文件锁flock,数据库事务   php没有继承posix标准支持的unix锁,只封装了一个linux系统调用flock(信号量也能做成锁),按理也是可以使用锁机制的,虽然效率低一点。   php脚本是运行在fastcgi容器中,而fastcgi是多进程的,所以如果php程序访问了临界资源,势必造成程序结果的不正确性。   估计还要考虑下fastcgi容器的问题   ----...

a6984021的博客 552

linux定时任务crontab文件锁flock问题

这几天linux的定时任务不运行,各种找原因,最终是因为文件锁的问题,自己总结一下,也希望能帮助其他小伙伴。 如果你的crontab还不熟悉可以参考:linux定时任务crontab 下面是我的定时任务: */1 * * * * flock -n /tmp/timing_pub.lock /data/server/php/bin/php /data/server/www/web/app/script/index.php article timing_pub ZYBL10wh94 >> /

白开水的博客 1805

linux使用flock文件锁解决脚本重复执行问题

原博文地址: linux使用flock文件锁解决脚本重复执行问题 | 运维生存时间 http://www.ttlsa.com/linux/linux-flock-useage/ linux的crontab命令,可以定时执行操作,最小周期是每分钟执行一次。关于crontab实现每秒执行可参考我之前的文章《linux crontab 实现每秒执行》现在有个问题,如果设定了任务每分钟执行一次,但有可...

抬山的博客 867

php原子操作,文件锁flock,数据库事务

php原子操作,文件锁flock,数据库事务 php没有继承posix标准支持的unix锁,只封装了一个linux系统调用flock(信号量也能做成锁),按理也是可以使用锁机制的,虽然效率低一点。php脚本是运行在fastcgi容器中,而fastcgi是多进程的,所以如果php程序访问了临界资源,势必造成程序结果的不正确性。估计还要考虑下fastcgi容器的问题------------...

子钦加油的博客 127

php文件锁使用

PHP文件锁是一种用于控制对文件的并发访问的机制。它可以确保同一时间内只有一个进程或线程可以对文件进行读取或写入操作,以避免数据竞争和冲突。在PHP中,可以使用flock函数来实现文件锁。flock函数可以在指定的文件上加锁或解锁,确保在加锁期间其他进程或线程无法对该文件进行访问。共享锁(Shared Lock):多个进程可同时获取共享锁,用于读取文件内容,不允许其他进程获取独占锁或写入操作。

php-yyds 638
上一篇: 析构函数与PHP的垃圾回收
下一篇: php日志处理
goodspringin
博客等级 码龄14年 3粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值