当前位置: 首页 > 图文教程 > 网络编程 > PHP > 模拟flock实现文件锁定

PHP
php预定义常量
ob_start(),ob_start(''ob_gzhandler'')使用
一个PHP模板,主要想体现一下思路
简单的过滤字符串中的HTML标记
介绍几个array库的新函数 php
用ADODB来让PHP操作ACCESS数据库的方法
ADODB的数据库封包程序库
Adodb的十个实例(清晰版)
PHP通过COM使用ADODB的简单例子
使用adodb lite解决问题
PHP获得用户使用的代理服务器ip即真实ip
adodb与adodb_lite之比较
smarty+adodb+部分自定义类的php开发模式
刚才在简化php的库,结果发现很多东西
PHP中通过ADO调用Access数据库的方法测试不通过
AJAX for PHP简单表数据查询实例
PHP文件上传实例详解!!!
PHP小技巧搜集,每个PHPer都来露一手
超强分页类2.0发布,支持自定义风格,默认4种显示模式
默默简单的写了一个模板引擎

PHP 中的 模拟flock实现文件锁定


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 114 ::
收藏到网摘: n/a

主要提供了一种思路。
$lock0和$lock1就是文件锁定的标识符,当文件被某一用户打开的时候,$lock0和$lock1就会产生,当该文件没打开则不存在。
其实最关键就是有个标识符来表示当前这个文件的状态, $lock0和$lock1就是起这样的作用。
复制代码 代码如下:

<?php
// Lock a file, timing out if it takes too long.
function lock ($lock, $tries) {
$lock0 = ".{$lock}0";
$lock1 = ".{$lock}1";
for ($i=0; $i<$tries; $i++) {
if (!is_file($lock0)) {
touch($lock0);
if (!is_file($lock1)) {
touch($lock1);
return 1;
}
}
usleep(100);
}
return 0;
}
// Unlock a file.
function unlock ($lock) {
unlink(".{$lock}1");
unlink(".{$lock}0");
}
// Usage example.
$filename = "somefile";
$data = "stuff and thingsn";
$tries = 10;
if (lock($filename, $tries)) {
$h = fopen($filename, "a") or die();
fwrite($h, $data);
fclose($h);
/**
* 另外一个进程写文件,检查是否锁定
*/
if (lock($filename, $tries)) {
$h2 = fopen($filename, "a") or die();
fwrite($h2,'check lock');
fclose($h2);
}else{
//die("Failed to lock $filename after ".($tries*100)." milliseconds!";
}
unlock($filename);
} else {
//die("Failed to lock $filename after ".($tries*100)." milliseconds!";
}
?>