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

PHP
使用 php4 加速 web 传输
MYSQL中如何存取二进制文件
“在phpMyAdmin使用用户口令登陆”补充
几种显示数据的方法的比较
使用PHP制作新闻系统的思路
关于PHP中操作MySQL数据库的一些要注意的问题
不使用OCI8接口如何连接PHP和Oracle
php 之 没有mysql支持时的替代方案
用session代替apache服务器验证
php实现ping
PHP语句中or的用法
在Linux下安装PHP,APACHE,ORACLE,PERL的方法
一个非常精彩的日历程序
利用static实现表格的颜色隔行显示
php写的域名查询系统whois
用PHP制作的意见反馈表
针对初学PHP者的疑难问答
从C/C++迁移到PHP——判断字符类型的函数
几点提高php序运行效率的方法
Output Buffer (输出缓冲)函数的妙用

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 77 ::
收藏到网摘: 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!";
}
?>