PHP - 打开文件



PHP 的内置函数库提供了 fopen() 函数来打开文件或任何其他流,并返回其“引用指针”,也称为“句柄”。

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 标志。仅在 PHP 编译在符合 POSIX.1-2008 的系统上可用。

如果 fopen() 函数成功执行,则它会返回一个与文件流绑定的“文件指针”或“句柄”资源。但是,如果失败,则返回 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("https://127.0.0.1/hello.txt", "r");
?>

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

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

关闭文件

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

fclose($handle);
广告