PHP - 追加文件



在 PHP 中,fopen() 函数返回用于不同打开模式的文件指针,例如 "w" 用于写入模式,"r" 用于读取模式,"r+" 或 "w+" 用于同时读取/写入操作,以及 "a" 模式,表示追加模式。

当文件以 "w" 模式参数打开时,它始终会打开一个新文件。这意味着如果文件已存在,其内容将丢失。随后的 fwrite() 函数将把数据放在文件的起始位置。

假设存在一个名为 "new.txt" 的文件,其内容如下:

Hello World
TutorialsPoint
PHP Tutorial

以下语句:

$fp = fopen("new.txt", "w");

在写入新内容之前会擦除所有现有数据。

读写模式

显然,如果文件以 "r" 模式打开,则无法添加新数据。但是,"r+" 或 "w+" 模式以 "r/w" 模式打开文件,但仍然在打开文件后立即执行 fwrite() 语句会覆盖内容。

示例

请查看以下代码:

<?php
   $fp = fopen("new.txt", "r+");
   fwrite($fp, "PHP-MySQL Tutorial\n");
   fclose($fp);
?>

使用此代码,"new.txt" 文件的内容现在将变为:

PHP-MySQL Tutorial
lsPoint
PHP Tutorial

为了确保新内容添加到现有文件的末尾,我们需要在写入操作之前手动将文件指针置于末尾。(初始文件指针位置在第 0 个字节)

fseek() 函数

PHP 的 fseek() 函数使您可以将文件指针放在任何您想要的位置:

fseek(resource $stream, int $offset, int $whence = SEEK_SET): int

$whence 参数是从哪里计算偏移量的。其值为:

  • SEEK_SET - 将位置设置为等于偏移量字节。

  • SEEK_CUR - 将位置设置为当前位置加上偏移量。

  • SEEK_END - 将位置设置为文件末尾加上偏移量。

示例

因此,我们需要使用 fseek() 函数将指针移动到末尾,如下面的代码所示,该代码将新内容添加到末尾。

<?php
   $fp = fopen("new.txt", "r+");
   fseek($fp, 0, SEEK_END);
   fwrite($fp, "\nPHP-MySQL Tutorial\n");
   fclose($fp);
?>

现在检查 "new.txt" 的内容。它将包含以下文本:

Hello World
TutorialsPoint
PHP Tutorial
PHP-MySQL Tutorial

追加模式

无需手动将指针移动到末尾,fopen() 函数中的 "a" 参数会以追加模式打开文件。每个 fwrite() 语句都会通过自动将指针移动到 SEEK_END 位置,将内容添加到现有内容的末尾。

<?php
   $fp = fopen("new.txt", "a");
   fwrite($fp, "\nPHP-MySQL Tutorial\n");
   fclose($fp);
?>

fopen() 函数允许的模式之一是 "r+" 模式,该模式下文件执行读取/追加操作。要从任何位置读取数据,您可以使用 fseek() 将指针置于所需的字节处。但是,每个 fwrite() 操作仅将新内容写入末尾。

示例

在下面的程序中,文件以 "a+" 模式打开。要读取第一行,我们将文件位置从开头移到第 0 个位置。但是,fwrite() 语句仍然将新内容添加到末尾,并且不会覆盖下一行,就像以 "r+" 模式打开时那样。

<?php
   $fp = fopen("new.txt", "a+");
   fseek($fp, 0, SEEK_SET);
   $data = fread($fp, 12);
   echo $data;
   fwrite($fp, "PHP-File Handling");
   fclose ($fp);
?>

因此,如果文件以 "r+/w+" 模式或 "a/a+" 模式打开,我们可以将数据追加到现有文件中。

广告

© . All rights reserved.