<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// This code is unrelated to the article and serves as a placeholder</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"The article is about to start..."</span></span><span>;
<p></span>?></p>
<p><hr></p>
<p># How to Use the lstat Function to Read File Permissions, Size, and Timestamps</p>
<p>In daily PHP development, we often need to get file information such as file permissions, size, last access time, and last modification time. PHP provides a very powerful function — <strong>lstat()</strong>, which helps us quickly retrieve these attributes.</p>
<p>## Introduction to lstat() Function<span></p>
<p><code></span><span><span class="hljs-title function_ invoke__">lstat</span></span><span>()
$filename: The file path for which information is required.
Return value: An array containing file information; returns false on failure.
The array returned by lstat() contains multiple indexes and keys corresponding to different file attributes. Common ones include:
dev: Device number
ino: Inode number
mode: File type and permissions (needs decoct() or bitwise operations to interpret)
nlink: Number of hard links
uid: User ID
gid: Group ID
size: File size (bytes)
atime: Last access time (UNIX timestamp)
mtime: Last modification time (UNIX timestamp)
ctime: Inode change time (UNIX timestamp)
The following example demonstrates how to read a file's permissions, size, and timestamps:
<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">// Get file attributes</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">"File size: "</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">" bytes\n"</span></span><span>;
</span><span><span class="hljs-comment">// Convert file permissions to octal</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">"File permissions: "</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">// Output timestamp information</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Last access time: "</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">"Last modification time: "</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 change time: "</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">"Unable to get file information.\n"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
When retrieving file information, both lstat() and stat() can be used.
If the file path may be a symbolic link and you need the link's own attributes, lstat() should be used.
Using lstat(), you can easily get file permissions, size, and timestamps, providing great convenience for file management, log analysis, and other scenarios.
<span></span>