lstat

関数の概要

PHPの lstat 関数は、指定したファイルやディレクトリの情報を取得するための関数です。特にシンボリックリンクの場合、リンク先ではなくリンク自体の情報を取得することができます。
通常の stat 関数はリンク先の情報を返しますが、lstat はリンクそのものの情報を知りたい場合に便利です。

パラメータの説明

  • filename(文字列): 情報を取得したいファイルやシンボリックリンクのパスを指定します。

戻り値

lstat は、指定したファイルまたはシンボリックリンクの情報を連想配列として返します。成功した場合は次のような情報が含まれます。

  • dev – デバイス番号
  • ino – inode番号
  • mode – ファイルの種類とパーミッション
  • nlink – ハードリンク数
  • uid – 所有者のユーザーID
  • gid – 所有者のグループID
  • rdev – デバイスID(特殊ファイルの場合)
  • size – ファイルサイズ(バイト単位)
  • atime – 最終アクセス時刻(Unixタイムスタンプ)
  • mtime – 最終更新時刻(Unixタイムスタンプ)
  • ctime – inode変更時刻(Unixタイムスタンプ)
  • blksize – ファイルシステムI/Oのブロックサイズ
  • blocks – 使用されているブロック数

ファイルやリンクが存在しない場合は false を返します。

使用例

基本的な使い方

<?php
$info = lstat('sample_link');
if ($info !== false) {
    print_r($info);
} else {
    echo 'ファイルが存在しません';
}
?>

このコードは、シンボリックリンク「sample_link」の情報を取得し、連想配列で表示します。リンク自体の情報が得られます。

シンボリックリンクかどうかの判定に利用する

<?php
$info = lstat('sample_link');
if ($info !== false) {
    // modeの上位ビットでファイルタイプを判別
    if (($info['mode'] & 0xF000) === 0xA000) {
        echo "これはシンボリックリンクです。";
    } else {
        echo "シンボリックリンクではありません。";
    }
} else {
    echo 'ファイルが存在しません';
}
?>

シンボリックリンクのファイルタイプは mode の上位4ビットにより識別可能です。ここでは16進数で 0xA000 がシンボリックリンクを表します。

リンク先の情報を stat と比較する

<?php
$link = 'sample_link';
$lstatInfo = lstat($link);
$statInfo = stat($link);

echo 'リンク自体のサイズ: ' . $lstatInfo['size'] . " バイトn";
echo 'リンク先ファイルのサイズ: ' . $statInfo['size'] . " バイトn";
?>

この例では、リンク自体のファイルサイズ(通常はリンク名の長さ)と、リンクが指している実際のファイルサイズを取得して比較しています。

関連する関数

  • stat – 指定ファイルの情報を取得(シンボリックリンクのリンク先を参照)
  • readlink – シンボリックリンクが指しているパスを文字列として取得
  • filetype – ファイル種別を文字列で取得
  • is_link – ファイルがシンボリックリンクかを判定する

まとめ

lstat はPHPでシンボリックリンク自体の情報を得たい場合に役立つ関数です。stat と異なり、リンク先ではなくリンクそのものの詳細が取得できるため、リンクの属性を正確に知りたいときに使います。
実務では、リンクの種類の判定やリンク情報のログ出力、ファイル操作前の状態確認などに活用できます。複数の関数と組み合わせることで、柔軟にファイル管理を行いましょう。