PHP - 附加文件


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

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

假设存在文件 “new.txt” ,其中包含以下内容 -

Hello World
Qikepu.com Tutorial
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
com Tutorial
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
Qikepu.com Tutorial
PHP Tutorial
PHP-MySQL Tutorial

Append 模式

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+” 模式打开现有文件,我们可以将数据附加到现有文件中