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)
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);