📜  PHP中的fopen模式“r+”、“rw+”和“w+”有什么区别?(1)

📅  最后修改于: 2023-12-03 14:45:28.122000             🧑  作者: Mango

PHP中的fopen模式“r+”、“rw+”和“w+”有什么区别?

在PHP中,「fopen」函数可用于打开一个文件,我们可以通过它来读、写文件。在使用「fopen」函数时,我们需要传递一个参数,表示文件打开的模式。其中有一些常用的文件模式如「r」、「r+」、「w」、「w+」、「a」、「a+」等。本文将主要介绍PHP中的fopen模式「r+」、「rw+」和「w+」的区别。

fopen模式介绍

先来快速了解下三种模式的含义:

模式 | 操作 | 指针位置 | 不存在 | 必须是文件 | 在文件末尾添加 ---|---|---|---|---|--- r+(可读可写)| 读写 | 文件的开头 | 返回 FALSE | 存在 | 否 rw+(可读可写,覆盖)| 读写 | 文件的开头 | 创建 | 存在 | 否 w+(可读可写)| 读写 | 文件的开头 | 创建 | 否 | 是

  • r+:以「读写」的方式打开文件。文件的指针将指向文件的开头,可以读取和写入。
  • rw+:以「读写」的方式打开文件。文件的指针将指向文件的开头,可读可写。如果文件不存在,则创建文件;如果文件存在,则清空文件内容。
  • w+:以「读写」的方式打开文件。文件的指针将指向文件的开头,可读可写。如果文件不存在,则创建文件;如果文件存在,则删除文件内容并将文件指针置于开头。
注意事项
  • 文件必须存在才能用「r+」mode打开;
  • 「w+」mode会清空文件并从头开始写入;
  • 「rw+」比「w+」安全一些,因为它不会清空已有的文件内容;
  • 无论是「r+」mode还是「rw+」mode,都可能会出现覆盖文件内容或移动文件指针到不可预期的位置的情况,因此在使用时要小心。
代码演示

下面是通过PHP代码演示三种模式操作文件的过程:

<?php
// r+ mode
$file = fopen("test.txt", "r+");
echo fread($file, filesize("test.txt"));
fwrite($file, "Hello World!");
fclose($file);

// rw+ mode
$file = fopen("test.txt", "rw+");
echo fread($file,filesize("test.txt"));
fwrite($file, "Hello World!");
fclose($file);

// w+ mode
$file = fopen("test.txt", "w+");
fwrite($file, "Hello World!");
echo fread($file,filesize("test.txt"));
fclose($file);
?>

以上代码中,我们先使用三个模式读取文件内容,然后再分别使用三个模式向文件中写入「Hello World!」。最后再使用三个模式读取文件内容,以查看写入是否成功。