【问题标题】:How can I overwrite file contents with new content in PHP?如何用 PHP 中的新内容覆盖文件内容?
【发布时间】:2011-09-26 06:00:10
【问题描述】:

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

【问题讨论】:

  • 听起来你是不小心使用了“a”模式。确保你使用'w'模式:只为写作而打开;将文件指针放在文件的开头并将文件截断为零长度。如果文件不存在,请尝试创建它。

标签: php file


【解决方案1】:

使用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+' 开放读写;将文件指针放在文件的开头并将文件截断为零长度。如果文件不存在,请尝试创建它。

【讨论】:

  • fopen 在很多情况下都是正确的工具。 file_put_contentsfile_get_contents 经常被误用于大字符串,这会损害性能。
  • file_put_contents 不会覆盖我现有的内容,它只是将其附加到末尾。
  • @dlofrodloh 对于新手:除非您明确添加 FILE_APPEND 标志,否则不应附加它。我不知道,也许错误地附加了旧的 PHP 版本。在 7.2 中,它按预期覆盖。
  • @MatthewFlaschen 我正在使用PHP 7.0fwrite() 正在将数据附加到文件中。您能告诉我如何使用fwrite 覆盖文件吗?
  • 已测试:file_put_contents 替换了我的 PHP 7.2 中的所有内容,它只附加了 FILE_APPEND 标志。
【解决方案2】:

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

$f=fopen('myfile.txt','w');
fwrite($f,'new content');
fclose($f);

警告那些使用 file_put_contents

它会对性能产生很大影响,例如[在同一类/情况下] file_get_contents:如果你有一个 BIG FILE,它会一次性读取整个内容,然后该操作可能需要很长的等待时间

【讨论】:

  • 如果您的脚本未能创建相关文件,它可能会失败。
  • 当你试图只删除一个文件时,为什么要附加一个递归标志(“-r”)?这是一个非常糟糕的 *NIX 做法。此外,您可以通过简单地使用 PHP 的 unlink('myfile.txt') 来实现同样的目的,而不是使用 exec() 或 shell_exec(),出于安全目的,系统管理员可以禁用它们。跨度>
【解决方案3】:
$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);

【讨论】:

  • 虽然这可以回答问题,但最好提供一些关于此代码如何提供帮助的解释。
  • 感谢您节省了我的时间;这也有助于我使用 PHP 和 Python,在上传 CSV 文件时替换 ,此外,使用 UTF-8 可以按预期工作。
猜你喜欢
  • 1970-01-01
  • 2021-01-11
  • 2010-12-26
  • 2010-09-20
  • 2022-01-08
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-07-17
相关资源
最近更新 更多