如何用PHP中的新内容覆盖文件内容?

new*_*bie 45 php file

我试图使用fopen,但我只设法将内容附加到文件末尾.是否可以用PHP中的新内容覆盖所有内容?

Mik*_*e B 78

使用 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
Run Code Online (Sandbox Code Playgroud)

或者,如果您遇到困难,fopen()可以使用ww+模式:

'w' 仅供写作; 将文件指针放在文件的开头,并将文件截断为零长度.如果该文件不存在,请尝试创建它.

'w +' 开放阅读和写作; 将文件指针放在文件的开头,并将文件截断为零长度.如果该文件不存在,请尝试创建它.

  • file_put_contents不会为我覆盖现有内容,只是将其追加到最后. (8认同)
  • 在许多情况下,`fopen`是正确的工具.`file_put_contents`和`file_get_contents`经常被误用于大字符串,这会损害性能. (7认同)
  • @dlofrodloh 对于新人:除非您明确添加 `FILE_APPEND` 标志,否则不应附加。也许错误附加了旧的 PHP 版本,我不知道。在 7.2 中,它会按预期覆盖。 (3认同)

小智 7

$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);
Run Code Online (Sandbox Code Playgroud)

  • 虽然这可以回答这个问题,但最好提供一些有关此代码如何提供帮助的解释。 (12认同)

PYK*_*PYK 6

我的首选方法是使用fopen、fwrite 和 fclose [它会花费更少的 CPU]

$f=fopen('myfile.txt','w');
fwrite($f,'new content');
fclose($f);
Run Code Online (Sandbox Code Playgroud)

警告那些使用file_put_contents 的人

它会对性能产生很大影响,例如[在同一类/情况下] file_get_contents也是:如果您有一个大文件,它会一次性读取整个内容,并且该操作可能需要很长时间的等待时间