Goodmorning everyone。
我有點卡住了。有沒有辦法打開一個文件,並只在某些條件下清空它?fopen和空文件只在某些條件下
我要的是:
1的fopen(文件) - >羊羣 - >讀取文件的內容
2.如果滿足某些條件,替換該文件的內容
3.解鎖並FCLOSE
的問題是:
fopen (file, w+)
清空文件事前,所以如果我想寫信給它
我在combinati試圖ftruncate($fn,0)
我不能閱讀的內容
fopen (file, r+)
不清空文件在r+
上,但是向文件寫入'null'
解決方法是首先讀取文件內容,然後將其打開。但是我從閱讀的那一刻開始直到我完成了嘗試保持該文件的鎖定。
任何任何想法?
編輯:
問題似乎是fwrite
。 ftruncate
清除文件,但fwrite
添加了'nul'。 100次通過後,有與fseek($fn, 0);
由於解決了數據
$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;
}
前面有一百個「NUL」!
1.鎖2.讀3.寫在必要時前 – zerkms
在讀取文件後有條件調用'ftruncate'有什麼問題? – Jon
問題是3。fopen(r +)不會重新顯示內容,但會添加 – Michel