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

PHP 取得檔案大小、存取/修改/變更時間完整指南

     編輯:PHP 相關知識

PHP 提供一組標準函式取得檔案系統中繼資料:filesize()、fileatime()、filemtime()、filectime(),搭配 date() 格式化即可人類可讀顯示。

核心函式對照表

函式意義回傳值備註
filesize($file)檔案大小位元組數 (int)大於 2GB 需 64 位系統
fileatime($file)最後存取時間Unix 時間戳讀取、執行會更新
filemtime($file)最後內容修改時間Unix 時間戳寫入、truncate 會更新
filectime($file)最後狀態變更時間Unix 時間戳chmod、chown、rename、移動會更新
fileperms($file)權限位元遮罩int配合 decoct() 顯示八進位
fileowner($file)擁有者 UIDint需權限
filegroup($file)群組 GIDint需權限

完整範例

<?php
$file = 'samplefile.doc';
if (!file_exists($file)) {
    die("檔案不存在: $file");
}

echo "檔案大小: " . filesize($file) . " bytes\n";
echo "最後存取: " . date('Y-m-d H:i:s', fileatime($file)) . "\n";
echo "最後修改: " . date('Y-m-d H:i:s', filemtime($file)) . "\n";
echo "狀態變更: " . date('Y-m-d H:i:s', filectime($file)) . "\n";
echo "權限: " . decoct(fileperms($file) & 0777) . "\n";

// 進階:SplFileInfo 物件導向介面
$info = new SplFileInfo($file);
echo "副檔名: " . $info->getExtension() . "\n";
echo "基礎名稱: " . $info->getBasename() . "\n";
echo "是否可讀: " . ($info->isReadable() ? '是' : '否') . "\n";
echo "是否可寫: " . ($info->isWritable() ? '是' : '否') . "\n";
?>

效能與快取注意事項

  • PHP 會快取 stat() 系統呼叫結果(clearstatcache() 清除)。
  • 同一腳本多次呼叫上述函式會回傳快取值,若檔案可能被外部修改,請在讀取前呼叫 clearstatcache(true, $file)(PHP 5.3+ 支援指定路徑清除)。
  • Windows 下 fileatime 可能不準確(預設關閉 last access 更新),可透過 fsutil behavior set disablelastaccess 0 啟用。

應用場景

  • 快取失效判斷(比對 filemtime)。
  • 日誌輪轉、舊檔清理(依 filectime/filemtime)。
  • 上傳檔案驗證(大小、類型、權限)。
  • 安全稽核(異常 filectime 變更偵測)。

掌握檔案中繼資料操作,是 PHP 檔案系統程式設計的基石技能。

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