background image

 

$fp

 = 

fopen

("/tmp/lock.txt", "w+"); 

if

 (

flock

(

$fp

, LOCK_EX)) { 

// 

 

进行排它型锁定

fwrite(

$fp

, "Write something here "); 

flock

(

$fp

, LOCK_UN); 

// 

 

释放锁定

else

 { 

echo

 "Couldn't lock the file !"; 


fclose(

$fp

); 

?> 
 
Note: 
 

 

由于

flock

() 

 

需要一个文件指针, 因此可能不得不用一个特殊的锁定文件来保护打算通过

 

写模式打开的文件的访问(在

fopen

() 

 

函数中加入 "w"   

或 "w+"

 

)。

 
Warning 

flock

() 

 

不能用于 NFS 

 

以及其它一些网络文件系统。详细资料查看自己操作系统的文档。

 

在部分操作系统中

flock

() 

 

以进程级实现。当用一个多线程服务器 API

 

(比如 ISAPI)时,

 

可能不可以依靠

flock

() 

 

来保护文件,因为运行于同一服务器实例中其它并行线程的 PHP 

 

脚本可以对该文件进行处理。

flock

() 

 

不支持旧的文件系统,如 FAT 以及它的派生系统。因此,此环境下总是返回 

FALSE

 

(尤其是对 Windows 98 

 

用户来说)。

 
php 中文件锁函数

flock

 

函数用法简介:

 

 

语法:
 
bool 

flock

 

 

( int 

$handle

 , int 

$operation

 [, int &

$wouldblock

 ] 

 

flock

 

 

() 操作的 handle 必须是一个已经打开的文件指针。operation 

 

可以是以下值之一:

1. 

 

要取得共享锁定(读取程序),将 operation 

 

设为 LOCK_SH(PHP 4.0.1 以前的版本设

 

置为 1  

2. 

 

要取得独占锁定(写入程序),将 operation 

 

设为 LOCK_EX(PHP 4.0.1 以前的版本中

 

设置为 2  

3. 

 

要释放锁定(无论共享或独占),将 operation 

 

设为 LOCK_UN(PHP 4.0.1 以前的版本

 

中设置为 3  

4. 

 

如果你不希望

flock

 

 

() 在锁定时堵塞,则给 operation 

 

加上 LOCK_NB(PHP 4.0.1 以

 

前的版本中设置为 4  

 

 

看下面代码:
 
a.php 
代码如下:
 
<?php