PHP fopen() 函数返回在不同打开模式下使用的文件的文件指针,例如 “w” 用于写入模式,“r” 读取模式和 “r+” 或 “r+” 模式用于同时读/写操作,以及 “a” 模式代表附加模式。
当使用 “w” 模式参数打开文件时,它总是会打开一个新文件。这意味着如果文件已经存在,则其内容将丢失。随后的 fwrite() 函数会将数据放在文件的起始位置。
假设存在文件 “new.txt” ,其中包含以下内容 -
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”文件的内容现在将变为 -
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” 的内容。它将包含以下文本 -
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+” 模式打开现有文件,我们可以将数据附加到现有文件中