ZetCode

PHP fclose 函数

最后修改于 2025 年 4 月 3 日

PHP 的 fclose 函数用于关闭一个已打开的文件指针。在 PHP 中处理文件时,它对于正确的资源管理至关重要。

基本定义

fclose 函数用于关闭由 fopenfsockopen 打开的文件。成功时返回 true,失败时返回 false

语法:fclose(resource $stream): bool。该函数释放与文件句柄关联的系统资源。完成后务必关闭文件。

基本的 fclose 示例

这展示了 fclose 关闭文件句柄的最简单用法。

basic_fclose.php
<?php

declare(strict_types=1);

$file = fopen("example.txt", "r");

if ($file) {
    // Read or write operations here
    fclose($file);
    echo "File closed successfully.";
}

这会打开一个文件进行读取,然后关闭它。fclose 调用释放文件资源。务必先检查文件是否成功打开。

写入后关闭

写入文件后应关闭文件,以确保所有数据都刷新到磁盘。

write_fclose.php
<?php

declare(strict_types=1);

$file = fopen("output.txt", "w");

if ($file) {
    fwrite($file, "Hello, World!");
    fclose($file);
    echo "Data written and file closed.";
}

这会将数据写入文件然后关闭它。关闭可确保所有缓冲的数据都已写入。没有 fclose,数据可能仍保留在缓冲区中。

错误处理

妥善的错误处理可确保即使发生错误也能清理资源。

error_handling.php
<?php

declare(strict_types=1);

$file = @fopen("nonexistent.txt", "r");

if ($file === false) {
    echo "Failed to open file.";
} else {
    try {
        // File operations here
    } finally {
        fclose($file);
    }
}

这演示了健壮的错误处理。即使发生异常,finally 块也能确保文件被关闭。务必清理资源。

关闭网络连接

fclose 还可以关闭使用 fsockopen 打开的网络连接。

network_fclose.php
<?php

declare(strict_types=1);

$socket = fsockopen("www.example.com", 80);

if ($socket) {
    fwrite($socket, "GET / HTTP/1.0\r\nHost: example.com\r\n\r\n");
    // Read response here
    fclose($socket);
    echo "Network connection closed.";
}

这会打开一个网络连接,发送请求,然后关闭它。网络资源应像文件资源一样及时释放。

多个文件句柄

处理多个文件时,应妥善关闭每个文件。

multi_fclose.php
<?php

declare(strict_types=1);

$file1 = fopen("file1.txt", "r");
$file2 = fopen("file2.txt", "w");

if ($file1 && $file2) {
    // Process files here
    fclose($file1);
    fclose($file2);
    echo "Both files closed successfully.";
}

这展示了多个文件句柄的正确处理。每个打开的文件都必须单独关闭。关闭的顺序通常不重要。

最佳实践

来源

PHP fclose 文档

本教程通过实际示例,涵盖了 PHP fclose 函数,展示了在不同场景下正确的处理文件句柄管理。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP 文件系统函数