PHP Conference Japan 2024

fstat

(PHP 4, PHP 5, PHP 7, PHP 8)

fstat使用已開啟的檔案指標取得檔案資訊

說明

fstat(資源 $stream): 陣列|false

收集由檔案指標 stream 所開啟檔案的統計資訊。此函式與 stat() 函式類似,不同之處在於它作用於已開啟的檔案指標,而不是檔名。

參數

stream

一個檔案系統指標 資源,通常使用 fopen() 建立。

返回值

返回一個包含檔案統計資訊的陣列;陣列的格式在 stat() 說明頁面上有詳細描述。失敗時返回 false

範例

範例 #1 fstat() 範例

<?php

// 開啟一個檔案
$fp = fopen("/etc/passwd", "r");

// 收集統計資訊
$fstat = fstat($fp);

// 關閉檔案
fclose($fp);

// 只印出關聯式陣列的部分
print_r(array_slice($fstat, 13));

?>

上述範例將輸出類似以下的內容

Array
(
    [dev] => 771
    [ino] => 488704
    [mode] => 33188
    [nlink] => 1
    [uid] => 0
    [gid] => 0
    [rdev] => 0
    [size] => 1114
    [atime] => 1061067181
    [mtime] => 1056136526
    [ctime] => 1056136526
    [blksize] => 4096
    [blocks] => 8
)

注意事項

注意此函式不適用於 遠端檔案,因為要檢查的檔案必須透過伺服器的檔案系統才能存取。

新增註解

使用者貢獻的註解 2 則註解

1
broom at alturnanetworks dot com
16 年前
另一種 ftp_get_contents() 方法,使用暫存串流處理器。將遠端檔案的檔案內容作為字串返回。

<?php
函式 ftp_get_contents ($conn_id, $remote_filename) {
//建立暫存處理器:
$tempHandle = fopen('php://temp', 'r+');

//從 FTP 取得檔案,假設檔案存在:
ftp_fget($conn_id, $tempHandle, $remote_filename, FTP_ASCII, 0));

//取得詳細統計資訊以檢查檔案大小:
$fstats = fstat($tempHandle);

return
fread($tempHandle, $fstats['size']);
}
?>

(建議加入一些錯誤處理)
0
tom at bitworks dot de
7 年前
請記住,除非您在檔案系統的掛載參數中特別設定,否則僅僅讀取檔案並不會更新檔案的存取時間 (atime)。

系統會提供修改時間 (mtime) 而不是存取時間 (atime)。但只有在檔案內容發生變更時,修改時間才會更新。

由於這種行為,請在您的 Session 系統中多加留意。僅使用 session_start() 並不足以保持您的 session 活躍。您應該寫入 Session,例如:

$_SESSION = time();

即使 atime 的掛載參數設定為 "noatime" 或遺漏,這也會重新觸發您的 mtime 和 atime,具體取決於所使用的檔案系統。
To Top