使用php,如何在不覆盖文本文件开头的情况下插入文本

时间:2020-03-06 14:26:54  来源:igfitidea点击:

我有:

<?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);

?>

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

解决方案

我不能完全确定问题,我们是否要写入数据而不是覆盖现有文件的开头,还是将新数据写入现有文件的开头,以保留现有内容?

要在不覆盖文件开头的情况下插入文本,我们必须将其打开以进行追加(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);

如果我们尝试写入文件的开头,则必须先读取文件内容(请参见file_get_contents),然后将新字符串写入文件,然后将文件内容写入输出文件。

$old_content = file_get_contents($file);
fwrite($file, $new_content."\n".$old_content);

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

If you have opened the file in append ("a" or "a+") mode, any data you write to the file will always be appended, regardless of the file position.

如果要将文本放在文件的开头,则必须先读取文件内容,例如:

<?php

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

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

fclose($file);

?>

我们将获得相同的打开文件以进行追加

<?php
$file=fopen(date("Y-m-d").".txt","a+") or exit("Unable to open file!");
if ($_POST["lastname"] <> "")
{
   fwrite($file,$_POST["lastname"]."\n");
}
fclose($file);
?>