PHP對(duì)文件進(jìn)行加鎖、解鎖實(shí)例
有時(shí)候你的php腳本或許需要線程安全的保證,比如進(jìn)行文件寫操作的時(shí)候。本文提供了文件加鎖函數(shù)以及使用示例。文件加鎖功能也可以用來(lái)獲得獨(dú)享的處理空間,防止腳本執(zhí)行發(fā)生同步錯(cuò)誤。
<?php
/*************************************************************************
*file lock
*@author Zeal Li
*http://www.zeali.net/
*
*************************************************************************/
/*
*lock_thisfile:獲得獨(dú)享鎖
*@param $tmpFileStr 用來(lái)作為共享鎖文件的文件名(可以隨便起一個(gè)名字)
*@param $locktype 鎖類型,缺省為false(非阻塞型,也就是一旦加鎖失敗則直接返回false),設(shè)置為true則會(huì)一直等待加鎖成功才返回
*@return 如果加鎖成功,則返回鎖實(shí)例(當(dāng)使用unlock_thisfile方法的時(shí)候需要這個(gè)參數(shù)),加鎖失敗則返回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:對(duì)先前取得的鎖實(shí)例進(jìn)行解鎖
*@param $fp lock_thisfile方法的返回值
*@param $tmpFileStr 用來(lái)作為共享鎖文件的文件名(可以隨便起一個(gè)名字)
*/
function unlock_thisfile($fp,$tmpFileStr){
@flock($fp,LOCK_UN);
@fclose($fp);
@fclose($fp);
@unlink($tmpFileStr.".lock");
}
?>
<?php
// 使用舉例
$tmpFileStr = "/tmp/mylock.loc";
// 等待取得操作權(quán)限,如果要立即返回則把第二個(gè)參數(shù)設(shè)為false.
$lockhandle = lock_thisfile($tmpFileStr,true);
if($lockhandle){
// 在這里進(jìn)行所有需要獨(dú)占的事務(wù)處理。
// ... ...
// 事務(wù)處理完畢。
unlock_thisfile($lockhandle,$tmpFileStr);
}
?>
- PHP 文件鎖與進(jìn)程鎖的使用示例
- PHP實(shí)現(xiàn)對(duì)文件鎖進(jìn)行加鎖、解鎖操作的方法
- 簡(jiǎn)單談?wù)?php 文件鎖
- PHP程序中的文件鎖、互斥鎖、讀寫鎖使用技巧解析
- PHP文件鎖函數(shù)flock()詳細(xì)介紹
- PHP文件鎖定寫入實(shí)例解析
- PHP flock 文件鎖詳細(xì)介紹
- PHP使用flock實(shí)現(xiàn)文件加鎖的方法
- PHP session文件獨(dú)占鎖引起阻塞問(wèn)題解決方法
- PHP多進(jìn)程編程實(shí)例
- 深入探究PHP的多進(jìn)程編程方法
- PHP基于文件鎖解決多進(jìn)程同時(shí)讀寫一個(gè)文件問(wèn)題示例
相關(guān)文章
php提交表單時(shí)判斷 if($_POST[submit])與 if(isset($_POST[submit])) 的區(qū)別
if(isset($_POST['submit'])) 它的意思是不是判斷是否配置了$_POST['submit'] 這個(gè)變量呢? 如果有這個(gè)變量 在執(zhí)行其它代碼2011-02-02
php實(shí)現(xiàn)的簡(jiǎn)單數(shù)據(jù)庫(kù)操作Model類
這篇文章主要介紹了php實(shí)現(xiàn)的簡(jiǎn)單數(shù)據(jù)庫(kù)操作Model類,結(jié)合實(shí)例形式分析了php數(shù)據(jù)庫(kù)操作模型類的定義與使用技巧,包括數(shù)據(jù)庫(kù)的基本增刪改查等功能,需要的朋友可以參考下2016-11-11
PHP 預(yù)定義變量、魔術(shù)常量和魔術(shù)方法功能與用法小結(jié)
這篇文章主要介紹了PHP 預(yù)定義變量、魔術(shù)常量和魔術(shù)方法,總結(jié)分析了PHP 預(yù)定義變量、魔術(shù)常量和魔術(shù)方法基本概念、原理、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04
PHP設(shè)計(jì)模式之裝飾者模式代碼實(shí)例
這篇文章主要介紹了PHP設(shè)計(jì)模式之裝飾者模式代碼實(shí)例,裝飾者模式就是不修改原類代碼和繼承的情況下動(dòng)態(tài)擴(kuò)展類的功能,本文就給出了代碼實(shí)例,需要的朋友可以參考下2015-05-05
php使用curl并發(fā)減少后端訪問(wèn)時(shí)間的方法分析
這篇文章主要介紹了php使用curl并發(fā)減少后端訪問(wèn)時(shí)間的方法,結(jié)合實(shí)例形式對(duì)比分析了curl使用并發(fā)訪問(wèn)前后程序運(yùn)行耗時(shí),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-05-05
php實(shí)現(xiàn)基于openssl的加密解密方法
這篇文章主要介紹了php實(shí)現(xiàn)基于openssl的加密解密方法,結(jié)合實(shí)例形式分析了php自定義函數(shù)實(shí)現(xiàn)基于openssl的加密解密操作相關(guān)技巧,需要的朋友可以參考下2016-09-09
php回調(diào)函數(shù)處理數(shù)組操作示例
這篇文章主要介紹了php回調(diào)函數(shù)處理數(shù)組操作,結(jié)合實(shí)例形式詳細(xì)分析了PHP回調(diào)函數(shù)遍歷與過(guò)濾數(shù)組相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-04-04

