*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)
}
?>
//WRITE$fp = fopen("test.txt", 'ab') //From the end
flock($fp, LOCK_EX) //lock the file for waiting...
fwrite($fp, 'Just A Test String.......') //Start writing...
flock($fp, LOCK_UN) //Release write lock
fclose($fp) //Close the file读 *** 作:
//READ
$fp = fopen("test.txt", 'r')
flock($fp, LOCK_SH)
//Read from the file.......
flock($fp, LOCK_UN)
fclose($fp)来详细的看看 PHP 手册上面关于函数 flock 的介绍吧:
flock -- 轻便的咨询文件锁定
其函数原型为:bool flock ( int handle, int operation [, int &wouldblock] )
PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法,需要注意的地方是:在 Windows 下 flock() 将会强制执行。flock() *** 作的 handle 必须是一个已经打开的文件指针。operation 可以是以下值之一:
要取得共享锁定(读取的程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。
要取得独占锁定(写入的程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。
要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。
如果不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。 flock() 允许执行一个简单的可以在任何平台中使用的读取/写入模型(包括大部分的 Unix 派生版和甚至是 Windows)。如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),可选的第三个参数会被设置为 TRUE。锁定 *** 作也可以被 fclose() 释放(代码执行完毕时也会自动调用)。如果成功则返回 TRUE,失败则返回 FALSE。
php加密平台自开通以来已加密了670367个php文件,总数据大小5823.04 MB2015-04-18更新:PHP在线加密Beta版支持命名空间加密,即php源码中有namespace的文件加密。2015-01-13维护:修复PHP5.5及以上php版本更好支持php加密(免费版已不更新,不修复)php授权用户动态简化,只记录授权变化状态2014-12-09新增自定义授权错误信息提示(以前为白屏)2014-06-22新增支持heredoc和nowdoc语法结构的字符串2014-03-24修复部份代码中使用__FILE__不兼容的BUG2013-09-02修改:php免费加密后版权信息中增加中文声明2013-08-01新增功能:授权版可锁定php文件加密的文件名,php文件加密后不允许更改文件名。此功能配合锁定域名功能效果更佳。
修复:部份环境中获取不到服务器IP地址2013-06-20维护:常规更新维护,PHP加密代码小调整。2013-05-12修改:重写授权版的PHP加密算法,提高对代码的保护。2013-04-11调整:发现有个别用户使用我们免费的php加密平台对php源码加密后作为非法用途,因此把免费版对上传的php文件大小调整为50K。2013-03-11修改:为了加强付费授权版的使用安全,把免费版和付费授权版的算法分开处理。以后升级过程中主要针对付费授权版进行升级,免费版只做BUG修复处理。2013-02-01修改:免费版的版权信息中不再显示内核更新日期。
修改:编码加强混淆程度2013-01-07修改:php加密后的代码中去除“PHPJM_”标志性字符。
新增:先对php源码压缩后再加密,减小加密后的php文件大小
修复:php源代码中的php标签只有<?而没有?>时的BUG2012-12-11新增功能:授权版可锁定在某个日期段内运行,可将您的代码以试用方式进行发布。
修改:不再限制加密后的文件以.php为扩展名运行,支持以任何扩展名保存加密后的文件。
修复:自定义版权信息乱码BUG2012-11-14PHP在线加密平台上线2012-11-06完成PHP加密核心算法代码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)