2012-05-07 41 views
2

我需要更改文件中的單個字符。
我寧可不使用輔助文件像這樣(僞代碼):
read(theFile)更改文件的單個字符

change(theFile)

write(theFile2)

erase(theFile)

rename(theFile2,theFile)

因爲通過這種方式,某些進程可能需要該文件它實際上已被刪除。
相反,我想操作自己的文件,因爲這樣,我指望服務器的操作系統來負責計時和處理對文件的訪問。

回答

4

你會想要使用flock來鎖定文件。基於實例的代碼從PHP docs

<?php 

$fp = fopen("file.txt", "r+"); 

if (flock($fp, LOCK_EX)) { // acquire an exclusive lock 
    //make your changes 
    fflush($fp);   // flush output before releasing the lock 
    flock($fp, LOCK_UN); // release the lock 
} else { 
    echo "Couldn't get the lock!"; 
} 

fclose($fp); 

?> 
1

代替剪輯是可能的,但是這取決於你想是非常困難的。例如,下面的代碼:

<?php 

$r = fopen("test.txt", "c+"); 
fseek($r, 50); 

// write out 
fwrite($r, "TESTING"); 
fclose($r); 

將開闢一個名爲test.txt文件並插入字測試到文件50個字節一旦關閉處理的文件將被保存的更改:沒必要做一個完整的更換。通過這種方式,您可以將添加到文件的內部的數據。我無法在任何PHP函數中看到刪除部分文件的方法,所以如果您需要刪除任何內容,您可能會不幸運,並且將不得不覆蓋整個文件。

編輯:這需要PHP 5.2.6或更高版本,據我所知fopen文檔。