| 函數 | 檢查對象 | 返回 true 條件 | 性能 |
|---|---|---|---|
| file_exists() | 文件/目錄/鏈接 | 路徑存在(含目錄) | 稍慢 |
| is_file() | 僅文件 | 是常規文件(非目錄/鏈接) | 較快 |
| is_dir() | 僅目錄 | 是目錄 | 較快 |
<?php
$file = '新建 文本 文檔.txt'; // 含空格文件名
$file1 = 'a.txt';
// 正確處理含空格文件名
$path = 'uploads/' . $file;
if (is_file($path)) {
echo "文件存在且是常規文件";
} elseif (file_exists($path)) {
echo "路徑存在但非常規文件(可能是目錄)";
} else {
echo "文件不存在";
}
// 批量檢查
$files = ['a.txt', 'b.txt', 'dir/'];
foreach ($files as $f) {
echo "$f: " . (is_file($f) ? '文件' : (file_exists($f) ? '目錄/其他' : '不存在')) . "\n";
}
?>
<?php
// 文件被其他進程刪除後,PHP 可能仍返回 true
clearstatcache(); // 清除狀態緩存
if (file_exists($file)) { ... }
?>
<?php
// 錯誤:相對路徑依賴當前工作目錄
if (file_exists('config.php')) { ... }
// 正確:使用絕對路徑
if (file_exists(__DIR__ . '/config.php')) { ... }
?>
若路徑超出 open_basedir 範圍,兩函數均返回 false 並拋出警告。
is_file(),語義明確且快is_dir()file_exists()clearstatcache(true, $path) (PHP 5.3+)is_uploaded_file($_FILES['file']['tmp_name']) 專門判斷上傳文件$fileInfo = new SplFileInfo('/path/to/file.txt');
if ($fileInfo->isFile()) { ... }
if ($fileInfo->isDir()) { ... }
echo $fileInfo->getSize() . ' bytes';
echo $fileInfo->getMTime(); // 修改時間戳