ZetCode

PHP 删除函数

最后修改于 2025 年 4 月 3 日

PHP 的 unlink 函数用于从文件系统中删除文件。它是 PHP 应用程序中以编程方式删除文件的主要方法。

基本定义

unlink 函数从文件系统中删除一个文件。它接受一个必需的参数(文件名),并在成功时返回 true,在失败时返回 false。

语法:unlink(string $filename, ?resource $context = null): bool。该函数需要适当的权限才能删除指定的文件。

基本文件删除示例

这展示了 unlink 删除文件的最简单用法。

basic_delete.php
<?php

declare(strict_types=1);

$file = "test.txt";

if (file_exists($file)) {
    if (unlink($file)) {
        echo "File deleted successfully.";
    } else {
        echo "Error deleting file.";
    }
} else {
    echo "File does not exist.";
}

这会在尝试删除之前检查文件是否存在。unlink 函数在成功时返回 true。请务リ先检查文件是否存在。

带错误处理的删除

适当的错误处理使文件删除在生产环境中更加健壮。

delete_with_error_handling.php
<?php

declare(strict_types=1);

function deleteFile(string $filename): bool {
    if (!file_exists($filename)) {
        throw new RuntimeException("File not found: $filename");
    }
    
    if (!is_writable($filename)) {
        throw new RuntimeException("No write permission: $filename");
    }
    
    return unlink($filename);
}

try {
    deleteFile("data.csv");
    echo "File deleted successfully.";
} catch (RuntimeException $e) {
    echo "Error: " . $e->getMessage();
}

此示例演示了全面的错误处理。它在尝试删除之前检查文件是否存在以及写入权限。异常提供了清晰的错误。

删除多个文件

您可以通过遍历文件名数组来删除多个文件。

delete_multiple_files.php
<?php

declare(strict_types=1);

$files = ["temp1.txt", "temp2.txt", "temp3.txt"];

foreach ($files as $file) {
    if (file_exists($file)) {
        if (unlink($file)) {
            echo "Deleted: $file\n";
        } else {
            echo "Failed to delete: $file\n";
        }
    } else {
        echo "Not found: $file\n";
    }
}

这会遍历文件数组并尝试删除每个文件。每个操作都单独处理,并附有自己的成功/失败消息。

安全文件删除

对于敏感数据,请考虑安全删除方法,这些方法会覆盖文件。

secure_delete.php
<?php

declare(strict_types=1);

function secureDelete(string $filename, int $passes = 3): bool {
    if (!file_exists($filename)) return false;
    
    $filesize = filesize($filename);
    $handle = fopen($filename, 'r+');
    
    for ($i = 0; $i < $passes; $i++) {
        ftruncate($handle, 0);
        fwrite($handle, str_repeat("\0", $filesize));
        fflush($handle);
    }
    
    fclose($handle);
    return unlink($filename);
}

secureDelete("sensitive_data.db");

此函数在删除之前用 null 字节覆盖文件。虽然不是完美的,但与简单删除相比,它为敏感数据提供了更好的安全性。

删除带通配符的文件

PHP 可以使用 glob 删除匹配模式的多个文件。

delete_with_wildcards.php
<?php

declare(strict_types=1);

$pattern = "logs/*.tmp";

foreach (glob($pattern) as $file) {
    if (is_file($file)) {
        unlink($file);
        echo "Deleted: $file\n";
    }
}

此示例查找 logs 目录中的所有 .tmp 文件并删除它们。glob 函数将通配符模式展开为文件名。

最佳实践

来源

PHP unlink 文档

本教程涵盖了 PHP 文件删除函数,并通过实际示例展示了不同的用法场景和最佳实践。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面有十多年的经验。

列出 所有 PHP 文件系统函数