`
isiqi
  • 浏览: 16562493 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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文件加锁和解锁的简单实现: 1. `lock_thisfile()` 函数:此函数用于获取文件的独占锁(默认为非阻塞模式,即如果加锁失败会立即返回)。它接受两个参数:$tmpFileStr 作为锁定文件的文件名,$...

    PHP实现对文件锁进行加锁、解锁操作的方法

    总而言之,PHP通过flock()提供了对文件加锁和解锁的机制,帮助开发者处理多进程环境下对文件的并发写入问题。需要注意的是,flock()实现的是建议性锁定,而非强制性锁定,因此在使用时应考虑各种可能影响数据一致性...

    PHP后台循环锁定文件.zip_PHP后台循环_php文件锁定_shell_锁定

    其次,PHP文件锁定是确保文件在被多个脚本访问时保持一致性的关键。PHP提供了flock函数,用于对文件进行读写锁操作。在进行文件操作之前,先锁定文件可以防止其他进程在同一时刻修改文件内容,从而避免数据冲突。读...

    php-redis锁-多种加锁解锁

    接下来,我们分析提供的`RedisLock.php`文件。这是一个实现Redis锁的类,通常会包含以下功能: - 初始化连接到Redis服务器 - 创建加锁方法,可能接受方法名、用户ID等参数,用于生成唯一键 - 设置锁的过期时间和自动...

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

    在PHP编程中,文件加锁是一个重要的概念,特别是在多用户并发访问同一文件时,为了防止数据的不一致性和冲突,我们需要使用文件加锁机制。`flock()` 函数是PHP中用于实现文件加锁的关键函数,它允许在跨平台的环境中...

    php并发加锁示例

    具体到代码层面,文件锁通过文件系统的锁定机制来实现,比如在Unix系统下可以使用flock()函数来加锁和解锁。数据库锁则是通过SQL语句来实现,例如在MySQL中可以使用GET_LOCK()和RELEASE_LOCK()函数来操作锁。而...

    php操作文件大全和mysql

    - **flock()**:对文件进行加锁。 - **fnmatch()**:根据模式匹配文件名。 #### 文件流操作 - **fopen()**:打开一个文件或 URL。 - **fpassthru()**:将文件句柄的剩余部分传递到客户端。 - **fputcsv()**:将...

    并发下常见的加锁及锁的PHP具体实现代码

    这个`CacheLock`类通过抽象的方式提供了一种简洁的API,允许开发者在不同的并发场景下进行加锁操作,从而保护关键代码段免受并发问题的影响。 总的来说,通过EAccelerator的内存锁和文件锁,PHP开发者可以有效地在...

    PHP读取文件内容后清空文件示例代码

    接着,为了保证文件内容读取和清空操作的原子性,我们需要对文件加锁。在PHP中,可以使用`flock`函数来加锁,该函数同样需要文件句柄作为参数,并指明要加的锁类型。在示例代码中,使用了`LOCK_EX`参数来获取独占锁...

    PHP通过加锁实现并发情况下抢码功能

    具体实现是使用fopen函数打开一个锁文件,并使用flock函数对其进行排他锁的锁定。当一个进程锁定成功后,其他尝试获取同一文件锁的进程将被阻塞,直到锁被释放。 在排他锁锁定期间,首先查询当前数据库中已经发放的...

    linux下的svn命令操作大全借鉴.pdf

    使用 `svn lock` 命令可以对文件加锁,例如:`svn lock -m "lock test file" test.php`,使用 `svn unlock` 命令可以对文件解锁。 5. 更新到某个版本 使用 `svn update` 命令可以将文件更新到某个版本,例如:`svn...

    php中并发读写文件冲突的解决方案

    在PHP开发中,高并发环境下对文件进行读写操作时,常常会遇到数据丢失的问题。这主要是因为多个进程或线程同时对同一个文件进行操作,而没有相应的机制来控制对文件的访问。当一个进程正在写入数据时,如果另一个...

    svn在linux下的使用(svn命令)

    例如:svn add test.php(添加 test.php)svn add *.php(添加当前目录下所有的 php 文件) 3. 将改动的文件提交到版本库 svn commit 命令用于将改动的文件提交到版本库中。例如:svn commit -m "add test file ...

    php并发解决案例(代码)

    2. 后端通过`flock()`函数对处理请求的关键文件进行加锁。 3. 使用PHP的互斥锁(Mutex)或信号量(Semaphore)类进行逻辑控制。 4. 在处理完请求后,正确释放所有锁,保持系统的可伸缩性。 最后,这个案例展示了一...

Global site tag (gtag.js) - Google Analytics