PHP - 打开文件


PHP 内置函数库提供了 fopen() 函数来打开文件或任何其他流,并返回它的 “reference pointer”,也称为 “handle”。

PHP 的 fopen() 函数类似于 C 语言中的 fopen(),只是在 C 语言中,它不能打开 URL。

fopen() 的语法

fopen() 函数具有以下签名 -


fopen(
   string $filename,
   string $mode,
   bool $use_include_path = false,
   ?resource $context = null
): resource|false

$filename 和 $mode 参数是必需的。以下是参数的解释 -

  • $filename − 此参数是表示要打开的资源的字符串。它可以是本地文件系统中的文件,也可以是带有 scheme:// 前缀的远程服务器上的文件。
  • $mode - 表示为文件/资源提供的访问类型的字符串。
  • $use_include_path − 如果您也想在 include_path 中搜索文件,则可以将布尔可选参数设置为 '1' 或 true
  • $context - 上下文流资源。

打开文件模式

PHP 允许以下列模式打开文件 -

模式 描述
r 以只读方式打开文件。
w 打开仅用于写入的文件。创建新文件(即使它存在)。
a 在追加模式下打开文件
x 创建仅用于写入的新文件。
r+ 打开文件进行读/写。
w+ 打开文件进行读/写。创建新文件(即使它存在)。
a+ 在附加模式下打开一个文件进行读/写。
x+ 创建一个新的读/写文件。
c 如果文件不存在,请打开该文件进行写入。但是,如果它存在,则不会被截断(如在 w 模式下)。
c++ 打开文件进行读/写(如果不存在)。但是,如果它存在,则不会被截断(如在 w 模式下)。
e 在打开的文件描述符上设置 close-on-exec 标志。仅适用于在 POSIX.1-2008 兼容系统上编译的 PHP。

如果 fopen() 函数成功执行,它将返回绑定到文件流的 文件指针(file pointer)或 句柄(handle) 资源。但是,如果失败,它将返回 false 并发出 E_WARNING


$handle = fopen('a.txt, 'r');
var_dump($handle);

如果文件存在于当前目录中,则输出显示成功 -

resource(5) of type (stream)

否则,您将收到以下错误消息 -

Warning: fopen(a.txt): Failed to open stream: 
No such file or directory in a.php on line 2
bool(false)

例子

以下示例显示 fopen() 函数的不同用法 -


<?php
   $handle = fopen("hello.txt", "w");
   $handle = fopen("c:/xampp/htdocs/welcome.png", "rb");
   $handle = fopen("http://localhost/hello.txt", "r");
?>

请注意,当 filename 是 目录 时,此函数也可能成功。在这种情况下,您可能需要在进行任何读/写操作之前使用 is_dir() 函数来检查它是否为文件。

打开文件后,您可以借助 fwrite() 或 fputs() 等函数在其中写入数据,并使用 fread() 和 fgets() 函数从中读取数据。

关闭文件

始终建议关闭句柄引用的打开流 -


fclose($handle);