首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP is_file() 函數完整指南:判斷一般檔案的正確姿勢

     編輯:PHP 綜合知識

函數簽名

is_file(string $filename): bool

回傳 true 當且僅當 $filename 存在且為一般檔案(非目錄、非連結、非裝置)。

基本範例

<?php
var_dump(is_file('a_file.txt'));      // true(存在且為檔案)
var_dump(is_file('/usr/bin/'));       // false(是目錄)
var_dump(is_file('/not/exist.txt'));  // false(不存在)
?>

常見誤區與注意事項

  1. 結果會被快取:同腳本多次呼叫同路徑,結果可能為舊快取。需呼叫 clearstatcache() 清除(或 PHP 5.3+ 透過 clearstatcache(true, $path) 指定路徑)。
  2. 相對路徑基於當前工作目錄:非腳本所在目錄。建議用 __DIR__ . '/relative/path' 絕對化。
  3. 符號連結:指向檔案的 symlink 回傳 true;指向目錄回傳 false。
  4. 大小寫敏感度:跟隨底層檔案系統(Linux 區分、Windows 不區分)。

進階實用範例

1. 安全刪除資料夾遞迴函數

function deleteFolder(string $path): void {
    if (!is_dir($path)) return;
    $handle = opendir($path);
    while (false !== ($file = readdir($handle))) {
        if ($file === '.' || $file === '..') continue;
        $full = $path . '/' . $file;
        if (is_file($full)) {
            @unlink($full);
        } elseif (is_dir($full)) {
            deleteFolder($full);
            @rmdir($full);
        }
    }
    closedir($handle);
}

2. 檔案副檔名白名單驗證(配合 upload)

function isAllowedFile(string $filename): bool {
    $ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
    return in_array($ext, ['jpg','png','gif','pdf','docx'], true);
}

// 使用
if (is_file($tmpPath) && isAllowedFile($originalName)) {
    move_uploaded_file($tmpPath, $destPath);
}

效能提示

  • is_file() 內部觸發 stat() 系統呼叫,頻繁輪詢大量檔案時會成瓶頸。
  • 批次處理建議改用 scandir() + SplFileInfo 迭代器,減少系統呼叫開銷。

結語

is_file() 是判斷「一般檔案」的標準函數,配合 clearstatcache()、絕對路徑、副檔名白名單,可構建安全可靠的檔案操作邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved