使用php,如何插入文本而不覆盖文本文件的开头

7 php insert

我有:

<?php

$file=fopen(date("Y-m-d").".txt","r+") or exit("Unable to open file!");

if ($_POST["lastname"] <> "")
{
   fwrite($file,$_POST["lastname"]."\n");
}

fclose($file);

?>
Run Code Online (Sandbox Code Playgroud)

但它会覆盖文件的开头.如何插入?

Con*_*oyP 26

我不完全确定你的问题 - 你想写数据而不是覆盖现有文件的开头,或者将新数据写入现有文件的开头,保留现有文件之后的现有内容吗?

要插入文本而不覆盖文件的开头,您必须打开它才能追加(a+而不是r+)

$file=fopen(date("Y-m-d").".txt","a+") or exit("Unable to open file!");

if ($_POST["lastname"] <> "")
{
   fwrite($file,$_POST["lastname"]."\n");
}

fclose($file);
Run Code Online (Sandbox Code Playgroud)

如果您尝试写入文件的开头,则必须首先读入文件内容(请参阅参考资料file_get_contents),然后将新字符串后跟文件内容写入输出文件.

$old_content = file_get_contents($file);
fwrite($file, $new_content."\n".$old_content);
Run Code Online (Sandbox Code Playgroud)

上述方法适用于小文件,但您可能会遇到内存限制,试图在使用时读取大文件file_get_conents.在这种情况下,请考虑使用rewind($file),它将句柄的文件位置指示符设置为文件流的开头.使用时请注意rewind(),不要使用a(或a+)选项打开文件,如下所示:

如果您已在附加("a"或"a +")模式下打开文件,则无论文件位置如何,您将始终追加写入文件的任何数据.