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

yipeiwu_com7年前PHP代码库

有时候你的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中集成PayPal标准支付的实现方法分享

PHP中集成PayPal标准支付的实现方法分享

PayPal支付功能其实一直在更新文档和接口,这里说的是一个简单的支付功能大概流程如下 1,在网站的结账页面,设置一个提交到PayPal网站的form,里面有一些金额,商品名称,商家收款...

php ob_flush,flush在ie中缓冲无效的解决方法

PHP程序的缓冲,而不论PHP执行在何种情况下(CGI ,web服务器等等)。该函数将当前为止程序的所有输出发送到用户的浏览器。 flush() 函数不会对服务器或客户端浏览器的缓存模式...

php查找字符串出现次数的方法

本文实例讲述了php查找字符串出现次数的方法。分享给大家供大家参考。具体方法如下: 在php中查找字符串出现次数的查找可以通过substr_count()函数来实现,下面就来给大家详细介...

phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法

1、没有正确安装Mysql数据库,在系统服务中Mysql相关的服务没有启动 (请查看正确安装Mysql的方法) 2、在系统的 system32(C:\windows\system32)...

php 数组的一个悲剧?

复制代码 代码如下: $a=1; $b=2; $t = array( array('a', 'string', $field['a']), // 名称 if($a==$b){array(...