Current Location: Home> Latest Articles> How to Use the lstat Function to Read File Permissions, Size, and Timestamps

How to Use the lstat Function to Read File Permissions, Size, and Timestamps

gitbox 2025-09-09
<span><span><span class="hljs-meta">&lt;?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.

Explanation of Return Values

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)

Example Code

The following example demonstrates how to read a file's permissions, size, and timestamps:

<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">// 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">&#039;size&#039;</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">&#039;%o&#039;</span></span><span>, </span><span><span class="hljs-variable">$fileInfo</span></span><span>[</span><span><span class="hljs-string">&#039;mode&#039;</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">&#039;atime&#039;</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">&#039;mtime&#039;</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">&#039;ctime&#039;</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">?&gt;</span></span><span>
</span></span>

Conclusion

  • 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>