當前位置: 首頁> 最新文章列表> 如何通過lstat 函數讀取文件的權限、大小和時間戳等屬性?

如何通過lstat 函數讀取文件的權限、大小和時間戳等屬性?

gitbox 2025-09-09
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 這裡的代碼和文章無關,只是佔位符</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文章即將開始..."</span></span><span>;

</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-comment"># 如何通過 lstat 函數讀取文件的權限、大小和時間戳等屬性?</span></span><span>

在日常的 PHP 開發中,我們經常需要獲取文件的相關信息,例如:文件權限、文件大小、最後訪問時間、最後修改時間等。PHP 提供了一個功能非常強大的函數 —— **</span><span><span class="hljs-title function_ invoke__">lstat</span></span><span>()**,它可以幫助我們快速獲取這些屬性。

</span><span><span class="hljs-comment">## lstat() 函數簡介</span></span><span>

`</span><span><span class="hljs-title function_ invoke__">lstat</span></span><span>()` 與 `</span><span><span class="hljs-title function_ invoke__">stat</span></span><span>()` 類似,都用於獲取文件信息,不同之處在於:  
- **</span><span><span class="hljs-title function_ invoke__">stat</span></span><span>()**:會跟隨符號鏈接,返回目標文件的信息。  
- **</span><span><span class="hljs-title function_ invoke__">lstat</span></span><span>()**:不會跟隨符號鏈接,而是返回符號鏈接本身的信息。  

這在處理軟鏈接時尤為重要。

函數原型如下:

```php
</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-title function_ invoke__">lstat</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filename</span></span><span>)
</span></span>
  • $filename :需要獲取信息的文件路徑。

  • 返回值:一個包含文件信息的數組,如果失敗則返回false

返回結果說明

lstat()返回的數組中包含多個下標和鍵名,對應文件的不同屬性。常見的有:

  • dev :設備號

  • ino :inode 節點號

  • mode :文件類型與權限(需要通過decoct()或位運算來解讀)

  • nlink :硬鏈接數量

  • uid :用戶ID

  • gid :組ID

  • size :文件大小(字節)

  • atime :最後訪問時間(UNIX 時間戳)

  • mtime :最後修改時間(UNIX 時間戳)

  • ctime :inode 修改時間(UNIX 時間戳)

示例代碼

下面的示例演示瞭如何讀取某個文件的權限、大小和時間戳等屬性:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$filename</span></span><span> = </span><span><span class="hljs-string">"example.txt"</span></span><span>;

</span><span><span class="hljs-comment">// 獲取文件屬性</span></span><span>
</span><span><span class="hljs-variable">$fileInfo</span></span><span> = </span><span><span class="hljs-title function_ invoke__">lstat</span></span><span>(</span><span><span class="hljs-variable">$filename</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$fileInfo</span></span><span> !== </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文件大小: "</span></span><span> . </span><span><span class="hljs-variable">$fileInfo</span></span><span>[</span><span><span class="hljs-string">'size'</span></span><span>] . </span><span><span class="hljs-string">" 位元組\n"</span></span><span>;

    </span><span><span class="hljs-comment">// 转换文件權限为八进制表示</span></span><span>
    </span><span><span class="hljs-variable">$permissions</span></span><span> = </span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-title function_ invoke__">sprintf</span></span><span>(</span><span><span class="hljs-string">'%o'</span></span><span>, </span><span><span class="hljs-variable">$fileInfo</span></span><span>[</span><span><span class="hljs-string">'mode'</span></span><span>]), -</span><span><span class="hljs-number">4</span></span><span>);
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文件權限: "</span></span><span> . </span><span><span class="hljs-variable">$permissions</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;

    </span><span><span class="hljs-comment">// 輸出時間戳信息</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"最後訪問時間: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>, </span><span><span class="hljs-variable">$fileInfo</span></span><span>[</span><span><span class="hljs-string">'atime'</span></span><span>]) . </span><span><span class="hljs-string">"\n"</span></span><span>;
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"最後修改時間: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>, </span><span><span class="hljs-variable">$fileInfo</span></span><span>[</span><span><span class="hljs-string">'mtime'</span></span><span>]) . </span><span><span class="hljs-string">"\n"</span></span><span>;
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"inode 修改時間: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"Y-m-d H:i:s"</span></span><span>, </span><span><span class="hljs-variable">$fileInfo</span></span><span>[</span><span><span class="hljs-string">'ctime'</span></span><span>]) . </span><span><span class="hljs-string">"\n"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"無法獲取文件信息。\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

總結

  • 當我們需要獲取文件信息時, lstat()stat()都可以使用。

  • 如果文件路徑可能是符號鏈接,且需要查看的是鏈接本身的屬性,就應使用lstat()

  • 通過lstat() ,我們可以方便地獲取文件權限、大小、時間戳等屬性,為文件管理、日誌分析等場景提供了極大的便利。

 <span></span>