ZetCode

PHP unlink 函数

最后修改于 2025 年 4 月 3 日

PHP 的 `unlink` 函数用于从文件系统中删除文件。它是 PHP 应用程序中文件管理操作的关键。

基本定义

`unlink` 函数会删除由其路径指定的文件的。成功时返回 true,失败时返回 false。该函数是二进制安全的。

语法:`unlink(string $filename, resource $context = null): bool`。可选的 context 参数可与流包装器一起使用。

基本的 unlink 示例

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

basic_unlink.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。始终先验证文件是否存在。

使用 unlink 进行错误处理

在处理文件系统操作时,适当的错误处理至关重要。

error_handling.php
<?php

declare(strict_types=1);

$file = "nonexistent.txt";

try {
    if (!unlink($file)) {
        throw new RuntimeException("Could not delete $file");
    }
    echo "File deleted successfully";
} catch (RuntimeException $e) {
    error_log($e->getMessage());
    echo "Error: " . $e->getMessage();
}

这演示了文件删除的异常处理。代码会尝试删除文件,如果失败则抛出异常。错误会被记录。

使用相对路径删除文件

`unlink` 可用于绝对和相对文件路径。

relative_path.php
<?php

declare(strict_types=1);

$file = "../temp/old_data.csv";

if (is_writable($file)) {
    if (unlink($file)) {
        echo "Temporary file removed";
    } else {
        echo "Failed to remove temporary file";
    }
} else {
    echo "File not writable or doesn't exist";
}

这会使用 `is_writable` 在删除前检查文件权限。相对路径是相对于当前工作目录解析的。

使用 context 进行 unlink

context 参数为流操作提供了额外的选项。

context_usage.php
<?php

declare(strict_types=1);

$file = "ftp://user:pass@example.com/tmp/file.txt";
$options = ['ftp' => ['overwrite' => true]];
$context = stream_context_create($options);

if (unlink($file, $context)) {
    echo "Remote file deleted successfully";
} else {
    echo "Failed to delete remote file";
}

这展示了如何通过 FTP 使用流 context 删除文件。context 提供了身份验证和额外的 FTP 特定选项。

安全删除文件

在 PHP 中删除文件时,安全注意事项很重要。

secure_deletion.php
<?php

declare(strict_types=1);

function secureDelete(string $path): bool {
    if (!file_exists($path)) {
        return false;
    }
    
    if (!is_file($path)) {
        return false;
    }
    
    $realpath = realpath($path);
    $allowedDir = realpath(__DIR__ . '/uploads');
    
    if (strpos($realpath, $allowedDir) !== 0) {
        return false;
    }
    
    return unlink($realpath);
}

$file = "uploads/user_upload.jpg";
if (secureDelete($file)) {
    echo "File securely deleted";
} else {
    echo "Deletion failed or not allowed";
}

此安全删除函数会彻底验证文件路径。它会检查文件是否存在、是否为普通文件以及是否位于允许的目录中。

最佳实践

来源

PHP unlink 文档

本教程涵盖了 PHP `unlink` 函数,并提供了实际示例,展示了在不同场景下带安全意识的文件删除。

作者

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

列出 所有 PHP 文件系统函数