PHP对文件进行加锁、解锁实例


Posted in PHP onJanuary 23, 2015

有时候你的php脚本或许需要线程安全的保证,比如进行文件写操作的时候。本文提供了文件加锁函数以及使用示例。文件加锁功能也可以用来获得独享的处理空间,防止脚本执行发生同步错误。

<?php

/*************************************************************************

*file lock

*@author Zeal Li

*http://www.zeali.net/

*

*************************************************************************/

/*

*lock_thisfile:获得独享锁

*@param $tmpFileStr 用来作为共享锁文件的文件名(可以随便起一个名字)

*@param $locktype 锁类型,缺省为false(非阻塞型,也就是一旦加锁失败则直接返回false),设置为true则会一直等待加锁成功才返回

*@return 如果加锁成功,则返回锁实例(当使用unlock_thisfile方法的时候需要这个参数),加锁失败则返回false.

*/
function lock_thisfile($tmpFileStr,$locktype=false){
    if($locktype == false)
        $locktype = LOCK_EX|LOCK_NB;
    $can_write = 0;
    $lockfp = @fopen($tmpFileStr.".lock","w");
    if($lockfp){
        $can_write = @flock($lockfp,$locktype);
    }
    if($can_write){
        return $lockfp;
    }
    else{
        if($lockfp){
            @fclose($lockfp);
            @unlink($tmpFileStr.".lock");
        }
        return false;
    }
}
/** 

*unlock_thisfile:对先前取得的锁实例进行解锁

*@param $fp lock_thisfile方法的返回值

*@param $tmpFileStr 用来作为共享锁文件的文件名(可以随便起一个名字)

*/

function unlock_thisfile($fp,$tmpFileStr){
    @flock($fp,LOCK_UN);
    @fclose($fp);
    @fclose($fp);
    @unlink($tmpFileStr.".lock");
}

?>
<?php
// 使用举例

$tmpFileStr = "/tmp/mylock.loc";

// 等待取得操作权限,如果要立即返回则把第二个参数设为false.

$lockhandle = lock_thisfile($tmpFileStr,true);

if($lockhandle){

    // 在这里进行所有需要独占的事务处理。

    // ... ...

    // 事务处理完毕。

    unlock_thisfile($lockhandle,$tmpFileStr);

}

?>

PHP 相关文章推荐
十天学会php之第八天
Oct 09 PHP
利用 window_onload 实现select默认选择
Oct 09 PHP
php 无极分类(递归)实现代码
Jan 05 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
Jun 23 PHP
php类中的各种拦截器用法分析
Nov 03 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
php使用标签替换的方式生成静态页面
May 21 PHP
php判断用户是否手机访问代码
Jun 08 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
Mar 25 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 PHP
PHP callback函数使用方法和注意事项
Jan 23 #PHP
PHPExcel内存泄漏问题解决方法
Jan 23 #PHP
使用PHP生成PDF方法详解
Jan 23 #PHP
C# WinForm中实现快捷键自定义设置实例
Jan 23 #PHP
对PHP PDO的一些认识小结
Jan 23 #PHP
smarty模板引擎中自定义函数的方法
Jan 22 #PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
Jan 22 #PHP
You might like
Thinkphp中Create方法深入探究
2014/06/16 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
PHP实现一个按钮点击上传多个图片操作示例
2020/01/23 PHP
15个款优秀的 jQuery 图片特效插件推荐
2011/11/21 Javascript
jquery实现鼠标滑过显示二级下拉菜单效果
2015/08/24 Javascript
js实现点击向下展开的下拉菜单效果代码
2015/09/01 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
简单实现js拖拽效果
2017/07/25 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
2017/12/14 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
2018/11/27 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
2020/01/18 Javascript
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
python list排序的两种方法及实例讲解
2017/03/20 Python
python框架中flask知识点总结
2018/08/17 Python
python实现文本界面网络聊天室
2018/12/12 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
Python变量类型知识点总结
2019/02/18 Python
python爬取内容存入Excel实例
2019/02/20 Python
FFrpc python客户端lib使用解析
2019/08/24 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
2019/09/16 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
python 如何对logging日志封装
2020/12/02 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
简易离婚协议书范本
2014/10/24 职场文书
任长霞观后感
2015/06/16 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python