当前位置: 首页 > 编程笔记 >

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

督嘉言
2023-03-14
本文向大家介绍PHP对文件进行加锁、解锁实例,包括了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 文件锁与进程锁的使用示例,包括了PHP 文件锁与进程锁的使用示例的使用技巧和注意事项,需要的朋友参考一下 鉴于前面介绍了swoole,就借用swoole的服务器/客户端与多进程机制对锁进行说明. 这里只针对PHP的锁机制进行说明,由于SQL的锁与其作用方式和应用场景不同,将作另行说明. 1.文件锁 flock() fclose() swoole_lock() 文件锁的可能应用

  • 本文向大家介绍PHP文件锁定写入实例解析,包括了PHP文件锁定写入实例解析的使用技巧和注意事项,需要的朋友参考一下 本文以实例讲述了PHP文件写入方法,以应对多线程写入,具体代码如下: 其中flock(int $handle, int $operation)函数操作的 handle 必须是一个已经打开的文件指针。 operation 可以是以下值之一: 要取得共享锁定(读取的程序),将 opera

  • 问题内容: 我有一个新来的人(隔壁的少年)写一些php代码来跟踪我的网站上的一些用法。我不熟悉php,所以我想问一下有关并发文件访问的问题。 我的本机应用程序(在Windows上)偶尔会通过点击包含我的php脚本的URL将一些数据记录到我的站点。本机应用程序不检查返回的数据。 这是一个人流量低的站点,并且数据并不重要。但是,如果两个用户发生冲突并且脚本的两个实例各自尝试向该文件添加一行,会发生什么

  • 问题内容: 我们的一位客户正在使用某些Novell安全软件,有时会锁定我们的软件创建的某些.class文件。发生这种情况时,这会给他们带来一些麻烦的问题,我正在尝试研究一种变通办法,我们可以将其添加到错误处理中以解决此问题。我想知道java api中是否有任何调用可用于检测文件是否已锁定,如果已锁定,则将其解锁。 问题答案: 在尝试写入文件之前,您可以使用File.canWrite()检查Java

  • 进程锁 这里的进程锁与线程锁、互斥量、读写锁和自旋锁不同,它是通过记录一个PID文件,避免两个进程同时运行的文件锁。 进程锁的作用之一就是可以协调进程的运行,例如crontab使用进程锁解决冲突提到,使用crontab限定每一分钟执行一个任务,但这个进程运行时间可能超过一分钟,如果不用进程锁解决冲突的话两个进程一起执行就会有问题。后面提到的项目实例Run也有类似的问题,通过进程锁可以解决进程间同步

  • 问题内容: 对Windows上的锁定文件进行故障排除 问题答案: Jetty会为Web应用程序缓冲静态内容,例如HTML文件,CSS文件,图像等。如果你使用的是NIO连接器,Jetty将使用内存映射文件来执行此操作。问题是在Windows上,内存映射文件会导致文件锁定,因此你无法更新或替换文件。实际上,这意味着你必须停止Jetty才能更新文件。 Remedy Jetty提供了一个配置开关,用于De