2011-09-26 54 views
29

我試圖使用fopen,但我只設法追加內容到文件結尾。是否有可能用PHP中的新內容覆蓋所有內容?如何用PHP中的新內容覆蓋文件內容?

+0

聽起來像是你用事故的「a」模式。確保您使用'w'模式:*僅限寫作;將文件指針放在文件的開頭,並將文件截斷爲零。如果文件不存在,請嘗試創建它。* – animuson

回答

56

使用file_put_contents()

file_put_contents('file.txt', 'bar'); 
echo file_get_contents('file.txt'); // bar 
file_put_contents('file.txt', 'foo'); 
echo file_get_contents('file.txt'); // foo 

或者,如果你堅持fopen()可以使用ww+模式:

'W'寫入方式打開;將文件指針放在文件的開頭,並將文件截斷爲零。如果文件不存在,請嘗試創建它。

'w +'開放閱讀和寫作;將文件指針放在文件的開頭,並將文件截斷爲零。如果文件不存在,請嘗試創建它。

+5

'fopen'在很多情況下都是正確的工具。 'file_put_contents'和'file_get_contents'經常被濫用於大字符串,這會損害性能。 –

+6

file_put_contents不會爲我覆蓋現有的內容,它只是將其附加到最後。 – dlofrodloh

1
$fname = "database.php"; 
$fhandle = fopen($fname,"r"); 
$content = fread($fhandle,filesize($fname)); 
$content = str_replace("192.168.1.198", "localhost", $content); 

$fhandle = fopen($fname,"w"); 
fwrite($fhandle,$content); 
fclose($fhandle); 
+5

雖然這可以回答這個問題,但最好提供一些關於此代碼如何提供幫助的解釋。 – vard

1

或者,如果你有你的服務器的完全控制權,爲什麼不能「保證」的經營圍繞調整它由之前刪除文件?

$wait=exec('rm -r -f myfile.txt'); 
file_put_contents('myfile.txt','new content'); 

$等待這裏只是爲了保持remove命令,直到它被完成