<span><span><span class="hljs-meta"><?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">?></span></span><span>
<hr>
</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"><?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">?></span></span><span>
</span></span>
當我們需要獲取文件信息時, lstat()和stat()都可以使用。
如果文件路徑可能是符號鏈接,且需要查看的是鏈接本身的屬性,就應使用lstat() 。
通過lstat() ,我們可以方便地獲取文件權限、大小、時間戳等屬性,為文件管理、日誌分析等場景提供了極大的便利。
<span></span>