file_exists() 是 PHP 的内置函数,用于判断指定的文件或目录是否存在。它的基本用法如下:
$path = '/path/to/file.txt';
if (file_exists($path)) {
echo '文件存在';
} else {
echo '文件不存在';
}
这个函数返回一个布尔值:如果文件或目录存在,则返回 true,否则返回 false。
is_readable() 同样是一个内置函数,用于判断指定路径是否可读。这对于文件读取操作尤其重要。例如:
$path = '/path/to/file.txt';
if (is_readable($path)) {
echo '文件可读';
} else {
echo '文件不可读';
}
这个函数也返回布尔值:如果文件或目录可以被读取,则返回 true。
仅使用 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() 读取文件内容。
比如我们有一个配置文件 config.json,存放在项目的根目录下。在项目初始化时,可能需要读取该文件中的配置信息:
$configPath = __DIR__ . '/config/config.json';
if (file_exists($configPath) && is_readable($configPath)) {
$config = json_decode(file_get_contents($configPath), true);
// 继续处理配置
} else {
die('配置文件缺失或不可读取');
}
这种方式可以避免很多因文件不存在或权限不足导致的问题,增强程序的健壮性。
如果你想判断一个远程文件(如 https://gitbox.net/resources/info.txt)是否存在并可读取,file_exists() 和 is_readable() 并不适用。它们只针对本地文件系统有效。判断远程文件是否存在通常需要使用 curl 或 get_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() 是实现这一目标的两个核心工具。合理地组合使用它们,能让你的程序更加健壮、更加安全。