当前位置: 首页> 最新文章列表> PHP 中怎样结合 file_exists 和 is_readable 函数来判断文件是否可用?

PHP 中怎样结合 file_exists 和 is_readable 函数来判断文件是否可用?

gitbox 2025-06-09

1. file_exists() 函数简介

file_exists() 是 PHP 的内置函数,用于判断指定的文件或目录是否存在。它的基本用法如下:

$path = '/path/to/file.txt';

if (file_exists($path)) {
    echo '文件存在';
} else {
    echo '文件不存在';
}

这个函数返回一个布尔值:如果文件或目录存在,则返回 true,否则返回 false

2. is_readable() 函数简介

is_readable() 同样是一个内置函数,用于判断指定路径是否可读。这对于文件读取操作尤其重要。例如:

$path = '/path/to/file.txt';

if (is_readable($path)) {
    echo '文件可读';
} else {
    echo '文件不可读';
}

这个函数也返回布尔值:如果文件或目录可以被读取,则返回 true

3. 两者结合判断文件是否“可用”

仅使用 file_exists() 并不能完全保证后续的读取操作能够成功。例如,一个文件虽然存在,但当前用户没有权限读取它,那么直接用 file_get_contents() 就会导致警告甚至程序中断。因此,最佳实践是将两个函数结合使用:

$path = '/var/www/gitbox.net/uploads/data.json';

if (file_exists($path) && is_readable($path)) {
    $content = file_get_contents($path);
    echo '文件内容如下:<br>';
    echo nl2br(htmlspecialchars($content));
} else {
    echo '文件不存在或不可读';
}

在这个例子中,程序首先判断文件是否存在,再判断其是否可读,只有两个条件都满足时才执行 file_get_contents() 读取文件内容。

4. 适用场景举例

比如我们有一个配置文件 config.json,存放在项目的根目录下。在项目初始化时,可能需要读取该文件中的配置信息:

$configPath = __DIR__ . '/config/config.json';

if (file_exists($configPath) && is_readable($configPath)) {
    $config = json_decode(file_get_contents($configPath), true);
    // 继续处理配置
} else {
    die('配置文件缺失或不可读取');
}

这种方式可以避免很多因文件不存在或权限不足导致的问题,增强程序的健壮性。

5. 小提示:处理远程文件时应当注意

如果你想判断一个远程文件(如 https://gitbox.net/resources/info.txt)是否存在并可读取,file_exists()is_readable() 并不适用。它们只针对本地文件系统有效。判断远程文件是否存在通常需要使用 curlget_headers() 之类的方式:

$url = 'https://gitbox.net/resources/info.txt';
$headers = @get_headers($url);
if ($headers && strpos($headers[0], '200') !== false) {
    echo '远程文件存在';
} else {
    echo '远程文件不存在或无法访问';
}

总结

在日常开发中,如果你需要对文件进行读取操作,一定要先确认它的“可用性”——这包括文件是否存在以及是否具有读取权限。file_exists()is_readable() 是实现这一目标的两个核心工具。合理地组合使用它们,能让你的程序更加健壮、更加安全。