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

PHP 檔案系統函式大全:80+ 函式分類速查與高頻實戰模式

     編輯:PHP 相關知識

前言:為何要系統性掌握檔案函式?

PHP 提供超過 80 個檔案系統函式,涵蓋路徑解析、讀寫、權限、鎖定、串流、目錄操作等。雖然常用的只有 20 左右,但理解分類脈絡能在遇到罕見需求(如跨平台路徑、串流過濾、inode 操作)時快速定位解法。本文將函式按功能域分類,並標註高頻實戰組合。

函式分類總覽表

功能域代表函式核心用途
路徑解析 basename, dirname, pathinfo, realpath 拆解/組合路徑、取得標準絕對路徑
存在性與型別檢查 file_exists, is_file, is_dir, is_link, is_readable, is_writable, is_executable 條件判斷前的安全檢查
資訊取得 filesize, filemtime, fileatime, filectime, fileperms, fileowner, filegroup, filetype, stat, lstat 建立檔案清單、快取驗證、權限稽核
讀取操作 file_get_contents, file, fopen+fread, fgets, fgetcsv, readfile 小檔案全讀、大檔案串流、CSV 解析、直接輸出
寫入操作 file_put_contents, fopen+fwrite, fputcsv, ftruncate 原子寫入、追加模式、CSV 匯出、截斷
目錄操作 mkdir, rmdir, scandir, glob, opendir+readdir 建立/刪除目錄、列舉檔案、模式匹配
複製/移動/刪除 copy, rename, unlink, move_uploaded_file 檔案生命週期管理
權限與擁有者 chmod, chown, chgrp, umask 安全強化、多使用者環境協作
連結與掛載 link, symlink, readlink, linkinfo 硬連結/符號連結建立與解析
串流與鎖定 flock, fseek, ftell, rewind, fflush, popen, pclose 併發控制、大檔案隨機存取、程序通訊
特殊檔案 tempnam, tmpfile, touch, parse_ini_file 暫存檔、時間戳更新、設定檔解析
磁碟空間 disk_free_space, disk_total_space 容量監控、上傳前預檢

高頻實戰組合模式

模式 1:安全讀取上傳檔案(防目錄穿越)

$filename = basename($_FILES['upfile']['name']); // 僅保留檔名
$dest = '/var/www/uploads/' . $filename;
if (move_uploaded_file($_FILES['upfile']['tmp_name'], $dest)) {
    // 成功
}

模式 2:大檔案分塊讀取(避免記憶體爆炸)

$handle = fopen('huge.log', 'r');
while (!feof($handle)) {
    $chunk = fread($handle, 8192); // 8KB 緩衝
    process($chunk);
}
fclose($handle);

模式 3:原子寫入(防止讀到半寫入檔案)

$tmp = tempnam(sys_get_temp_dir(), 'app_');
file_put_contents($tmp, $data);
rename($tmp, $target); // 同檔案系統下 rename 為原子操作

模式 4:目錄遞歸複製(部署/備份常用)

function rcopy($src, $dst) {
    $dir = opendir($src);
    @mkdir($dst);
    while (($file = readdir($dir)) !== false) {
        if ($file === '.' || $file === '..') continue;
        $srcPath = $src . '/' . $file;
        $dstPath = $dst . '/' . $file;
        is_dir($srcPath) ? rcopy($srcPath, $dstPath) : copy($srcPath, $dstPath);
    }
    closedir($dir);
}

Windows 與 Unix 差異提醒

  • chown/chgrp/lchown 僅 Unix 有效。
  • symlink Windows 需管理員權限或開發者模式(Vista+)。
  • 路徑分隔符:PHP 內部統一接受 /,輸出給 Shell 時請用 DIRECTORY_SEPARATOR。
  • clearstatcache() 在同腳本多次 file_exists/filesize 之間必呼叫,否則讀到快取舊值。

WordPress 實務觀察

WP 核心大量使用 dirname(__FILE__)(PHP 5.3+ 建議改 __DIR__)建構絕對路徑,確保檔案包含不受執行目錄影響。這是「路徑解析」類函式在大型專案中的教科書級應用。

總結

檔案函式雖多,但核心場景集中在「讀、寫、查、刪、權、目錄」。建立分類心智模型,配合 SplFileObject 物件導向封裝(PHP 5.1+),即能優雅處理 95% 的檔案操作需求。

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