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

yipeiwu_com6年前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使用QueryList轻松采集js动态渲染页面方法

QueryList使用jQuery的方式来做采集,拥有丰富的插件。下面来演示QueryList使用PhantomJS插件抓取JS动态创建的页面内容。 一、安装 使用Composer安装:...

PHP加密解密函数详解

分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */...

PHP实现执行外部程序的方法详解

PHP实现执行外部程序的方法详解

本文实例讲述了PHP实现执行外部程序的方法。分享给大家供大家参考,具体如下: 在一些特殊情况下,会使用PHP调用外部程序执行,比如:调用shell命令、shell脚本、可执行程序等等,今...

php使用memcoder将视频转成mp4格式的方法

本文实例讲述了php使用memcoder将视频转成mp4格式的方法。分享给大家供大家参考。具体实现方法如下: 复制代码 代码如下:<?php convertTo( "som...

php实现快速排序法函数代码

代码1: 复制代码 代码如下: <?php function quicksort($str){ if(count($str)<=1) return $str;//如果个数不大...