php将文件同时写入多个文件,PHP实现多个进程同时写入同一个文件的两种方案分享...

本文详细介绍了PHP中用于文件操作的fopen、fwrite、flock和fclose函数,特别是文件锁定机制,包括共享锁定和独占锁定。示例代码展示了如何实现写入文件时的排它型锁定,确保数据安全写入,以及在写入完成后释放锁。同时,还提供了一种自定义的文件锁定方法,通过创建临时锁文件来避免数据冲突。
摘要由CSDN通过智能技术生成

考点:对函数的理解

fopen :打开文件或者URL参数1:文件地址或者URL

参数2:mode 参数指定了所要求到该流的访问类型

'r' 只读方式打开,将文件指针指向文件头。

'r+' 读写方式打开,将文件指针指向文件头。

'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

fwrite : 写入文件参数1:文件名文件系统指针

参数2: 要写入的内容 string类型

返回值: 写入成功返回写入的字符数,失败返回false

flock: 轻便的咨询文件锁定参数1:文件系统指针,是典型地由 fopen() 创建的 resource(资源)。

参数2:模式

LOCK_SH取得共享锁定(读取的程序)。

LOCK_EX 取得独占锁定(写入的程序。

LOCK_UN 释放锁定(无论共享或独占)。

如果不希望 flock() 在锁定时堵塞,则是 LOCK_NB(Windows 上还不支持)。

返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。

fclose : 关闭一个打开的文件指针参数1:文件名

参数2:成功时返回 TRUE, 或者在失败时返回 FALSE。

方案一function writeData($filepath, $data)

{

$fp = fopen($filepath,'a');

do{

usleep(100);

}while (!flock($fp, LOCK_EX)); //LOCK_EX 取得独占锁定(写入的程序)进行排它型锁定 获取锁 有锁就写入,没锁就得

$res = fwrite($fp, $data."\n");

flock($fp, LOCK_UN); //LOCK_UN 释放锁定(无论共享或独占)。

fclose($fp);

return $res;

}

方案二(自己做标记的方法)function write_file($filename, $content)

{

$lock = $filename . '.lck';

$write_length = 0;

while(true) {

if( file_exists($lock) ) {

usleep(100);

} else {

touch($lock);

$write_length = file_put_contents($filename, $content, FILE_APPEND);

break;

}

}

if( file_exists($lock) ) {

unlink($lock);

}

return $write_length;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值