大家,早安。
我有点卡住了。有没有办法只在特定条件下打开文件并清空它?
我想要的是:
1. fopen( file ) -->flock --> 读取文件内容
2. 如果满足某些条件,替换文件内容
3. unlock 和 fclose
问题是:
fopen (file, w+)
事先清空文件,所以我无法读取内容
fopen (file, r+)
如果我想写入它不会清空文件
我已经尝试ftruncate($fn,0)
与 结合使用r+
,但是将“null”写入文件
一种解决方法是首先读取文件内容然后打开它。但我试图从阅读的那一刻起一直锁定文件,直到我完成。
有人有什么想法吗?
编辑:
问题似乎是fwrite
.
ftruncate
清除文件,但fwrite
添加一个“nul”。100 次通过后,数据前面有一百个 'nul'
$pt = "../path/file";
$fn = lock_file($pt);
$i = fread($fn,100);
ftruncate($fn,0);
fwrite($fn,"data");
fflush($fn);
flock($fn, LOCK_UN);
fclose($fn);
function lock_file($file){
$fn = fopen($file, "c+");
$try=0;
do{
if($try>0){usleep(rand(1,10000));}
$try ++;
}
while(!flock($fn, LOCK_EX | LOCK_NB) and $try <= 300);
if($try>=300){return FALSE;}
return $fn;
}
fseek($fn, 0);
感谢解决!