ZetCode

PHP is_writable 函数

最后修改于 2025 年 4 月 3 日

PHP is_writable 函数检查文件或目录是否可写。对于文件操作来说,避免权限错误至关重要。

基本定义

is_writable 函数检查指定文件名是否存在且是否可写。如果文件存在且可写,则返回 true。

语法:is_writable(string $filename): bool。该函数检查有效用户的权限,而不仅仅是文件模式。

is_writable 基本示例

这展示了使用 is_writable 检查文件的最简单用法。

basic_is_writable.php
<?php

declare(strict_types=1);

$file = "data.txt";

if (is_writable($file)) {
    echo "The file is writable";
} else {
    echo "The file is not writable";
}

这检查 "data.txt" 是否可以被当前用户写入。结果取决于文件权限和运行脚本的用户。

检查目录是否可写

is_writable 也可以检查目录是否可写。

directory_check.php
<?php

declare(strict_types=1);

$dir = "/var/www/uploads";

if (is_writable($dir)) {
    echo "The directory is writable";
} else {
    echo "The directory is not writable";
}

这验证了 Web 服务器是否可以写入 uploads 目录。要在其中创建或修改文件,需要目录可写权限。

在写入文件之前进行检查

一个实际的例子,在尝试写入之前检查是否可写。

before_write.php
<?php

declare(strict_types=1);

$logFile = "application.log";

if (!is_writable($logFile)) {
    die("Cannot write to log file. Check permissions.");
}

file_put_contents($logFile, "New log entry\n", FILE_APPEND);
echo "Log entry written successfully";

这通过在写入之前检查是否可写来防止错误。对于应用程序中的稳健文件处理来说,这是一个好习惯。

相对路径与绝对路径

该函数适用于相对和绝对文件路径。

path_types.php
<?php

declare(strict_types=1);

$relative = "config/settings.ini";
$absolute = "/etc/php/8.2/php.ini";

var_dump(is_writable($relative));
var_dump(is_writable($absolute));

两种路径类型都有效。相对路径是相对于脚本的当前工作目录来解析的。

检查多个文件

示例展示了如何检查多个文件的可写性。

multiple_files.php
<?php

declare(strict_types=1);

$files = [
    "data.csv",
    "reports/output.log",
    "/tmp/php_uploads"
];

foreach ($files as $file) {
    $status = is_writable($file) ? "writable" : "not writable";
    echo "{$file} is {$status}\n";
}

这在一个循环中有效地检查了多个文件。三元运算符使输出简洁易读。

边缘情况

is_writable 在特殊情况下具有特定行为。

edge_cases.php
<?php

declare(strict_types=1);

// Non-existent file
var_dump(is_writable("nonexistent.txt"));

// Symbolic link
var_dump(is_writable("/var/www/html/symlink"));

// Windows share
var_dump(is_writable("\\\\server\\share\\file.txt"));

对于不存在的文件,它返回 false。对于符号链接,它检查目标。Windows 网络路径也支持,但需要适当的权限。

最佳实践

来源

PHP is_writable 文档

本教程介绍了 PHP is_writable 函数,并提供了实际示例,展示了其在不同场景中的用法。

作者

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

列出 所有 PHP 文件系统函数