如何使用 ob_start 追加到文件

Posted

技术标签:

【中文标题】如何使用 ob_start 追加到文件【英文标题】:How to append to file using ob_start 【发布时间】:2012-06-09 19:13:43 【问题描述】:

我已经找了很长时间了,看看如果在 php 中使用 ob_start 是否可以“附加”到一个文件。

我尝试了以下方法,但没有成功。有什么方法可以实现吗?

<?php

$cacheFile = 'file.txt';

if ( (file_exists($cacheFile)) && ((fileatime($cacheFile) + 600) > time()) )

$content = file_get_contents($cacheFile);
echo $content;
 else

ob_start();
// write content
echo '<h1>Hello world</h1>';
$content = ob_get_contents();
ob_end_clean();
file_put_contents($cacheFile,$content,'a+'); // I added the a+
echo $content;

?>

我从 S.O. 的另一篇文章中借用了上面的示例

【问题讨论】:

【参考方案1】:

file_put_contents 不能这样工作。要追加,您需要手动使用fopenfwritefclose

$file = fopen($cacheFile, 'a+');
fwrite($file, $content);
fclose($file);

【讨论】:

file_put_contents 实际上支持文件附加:) @Jack:实际上并不知道 :-P 现在我知道了!无论如何我都会把它留在这里。 啊,过去我“提出”问题而现在“回答”问题的美好时光。再次感谢 Rocket ;-)【参考方案2】:

要使用file_put_contents() 追加,您可以简单地将FILE_APPEND 作为第三个参数传递:

file_put_contents($cacheFile, $content, FILE_APPEND);

它还可以用于使用二进制 OR 运算符应用文件锁定,例如FILE_APPEND | LOCK_EX.

【讨论】:

以上是关于如何使用 ob_start 追加到文件的主要内容,如果未能解决你的问题,请参考以下文章

PHP如何在没有ob_start()的情况下获得服务器的累积HTML输出[重复]

如何使用 Python 在现有 AVRO 文件中追加数据

如何在不重新打开文件的情况下读取然后写入/追加到文本文件?

Linux 如何使用echo指令向文件写入内容

在 Perl 中,如何在文件中更改、删除或插入一行,或追加到文件的开头?

如何在 C# 中进行原子写入/追加,或者如何使用 FILE_APPEND_DATA 标志打​​开文件?