Php 简明教程

PHP - Append File

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

当使用“w”模式参数打开文件时,它总是打开一个新文件。这意味着如果文件已经存在,其内容将丢失。随后的 fwrite() 函数将数据放在文件开始位置。

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

Hello World
TutorialsPoint
PHP Tutorial

以下语句 -

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

删除所有现有数据,然后再写入新内容。

Read/Write Mode

显然,在以“r”模式打开文件时无法添加新数据。然而, “r+”或“w+” mod 在“r/w”模式下打开文件,但在打开文件后一个 fwrite() 语句仍会覆盖内容。

Example

查看以下代码:

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

利用这段代码, “new.txt” 文件的内容现在变为 −

PHP-MySQL Tutorial
lsPoint
PHP Tutorial

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

The fseek() Function

PHP 的 fseek() 函数让您能够将文件指针放置到任何您想要的位置 −

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

$whence 参数是指从哪里计算偏移量。它的值有 −

  1. SEEK_SET − 将位置设置为等于偏移字节。

  2. SEEK_CUR − 将位置设置为当前位置外加偏移量。

  3. SEEK_END − 将位置设置为文件末尾外加偏移量。

Example

因此,我们需要利用 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

Append Mode

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

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

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

Example

在下面的程序中,文件在“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+”模式下打开,我们就可以追加数据到现有文件。