file_exists() 是检查文件或目录是否存在最常用且稳妥的方式,但需结合 is_file()、is_dir()、is_readable() 等函数进行进阶判断,并注意缓存、权限、安全及远程文件限制。

直接用 file_exists() 就行,这是最常用也最稳妥的方式。
基础用法:检查文件或目录是否存在
它不区分文件和目录,只看路径是否真实存在且当前 PHP 进程有权限访问:
-
✅ 正确示例:
<?php<br> $path = __DIR__ . '/config.php';<br> if (file_exists($path)) {<br> echo '文件存在,可以安全读取';<br> } else {<br> echo '文件不存在或无法访问';<br> }<br>?> - 推荐用
__DIR__拼接路径,避免相对路径出错 - 注意:返回
false可能是文件真不存在,也可能是权限不足、符号链接断裂,或被open_basedir限制
进阶判断:明确区分文件 vs 目录
如果必须确认是“普通文件”(而非目录),单靠 file_exists() 不够:
-
✅ 更严谨写法:
if (file_exists($path) && is_file($path)) {<br> // 确保是文件,不是目录<br>} -
is_dir($path)专门判断是否为目录 - 三者常组合使用:
file_exists() + is_file() + is_readable(),确保文件存在、是文件、且可读
特别注意:缓存与远程文件
file_exists() 的结果默认会被 PHP 缓存,连续调用可能返回旧结果:
立即学习“PHP免费学习笔记(深入)”;
- 修改文件后立即检查?加
clearstatcache(true, $path)清除指定路径缓存 - 它不能可靠判断远程 URL 文件(如
http://);对这类场景要用curl或fsockopen手动发 HEAD 请求 - 网络文件系统(NFS)、容器挂载卷等环境,行为可能不稳定,建议加超时和重试逻辑
权限与安全提醒
存在 ≠ 可用。生产环境务必叠加权限检查:
-
is_readable($path):确认能读(比file_exists多一层保障) -
is_writable($path):写入前必查,尤其日志、上传目录 - 避免直接拼接用户输入的路径,防止路径遍历(如
../../../etc/passwd)



















