【PHP8.x】stat関数の使い方

stat関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

stat関数はファイルやディレクトリに関する詳細な情報を取得する関数です。この関数は、指定されたファイルまたはディレクトリのメタデータ(属性情報)を配列として返します。取得できる情報には、ファイルのサイズ、パーミッション(読み書き実行権限)、ファイルの所有者IDやグループID、最終アクセス時刻、最終更新時刻などが含まれます。これらの情報は、システム管理やセキュリティ関連の処理、例えばファイルの存在確認、アクセス権の検証、更新日時の取得などに利用されます。

第一引数には、情報を取得したいファイルまたはディレクトリのパスを指定します。この関数が返す配列は、数値添字と連想配列の2つの形式で情報を提供します。特に連想配列のキー名(例: 'size'、'mode')を使用すると、必要な情報に直感的にアクセスできるため、コードの可読性が向上します。

例えば、Webアプリケーションでユーザーがアップロードしたファイルのサイズを確認したり、特定のログファイルの最終更新日時を監視したりする際に非常に役立ちます。この関数を使うことで、ファイルシステムの低レベルな情報を効率的に取得し、アプリケーションの要件に応じた柔軟なファイル操作を実現できます。初心者の方も、ファイルの情報を取得する基本的な手段として覚えておくと良いでしょう。

構文(syntax)

1$filename = 'path/to/file.txt';
2$file_stats = stat($filename);

引数(parameters)

string $filename

  • string $filename: ファイルのパスを指定する文字列

戻り値(return)

array|false

stat 関数は、指定されたファイルのステータス情報を格納した連想配列を返します。ファイルが存在しない場合やアクセス権がない場合は false を返します。

サンプルコード

PHP stat関数でファイル属性を取得する

1<?php
2
3/**
4 * stat関数を使用してファイルの静的な情報を取得し、表示するサンプルコードです。
5 *
6 * このコードは一時ファイルを作成し、そのファイルに対してstat関数を実行します。
7 * stat関数は、ファイルサイズ、最終更新日時、パーミッションなどの詳細なファイルシステム情報を提供します。
8 * キーワード「static」は、ファイルシステムにおける「静的な情報」(ファイルの属性など)を指します。
9 */
10
11// 検査対象となるファイルパスを定義します。
12$filename = 'temp_example_for_stat.txt';
13
14// サンプル実行のために一時ファイルが存在しない場合は作成します。
15// これにより、コードが単体で動作し、常にstat関数が検査できるファイルがある状態を保証します。
16if (!file_exists($filename)) {
17    file_put_contents($filename, "これはstat関数を試すための一時ファイルです。\nPHPの静的なファイル情報を確認します。");
18    echo "一時ファイル '$filename' を作成しました。\n\n";
19}
20
21// stat関数を呼び出して、ファイルの静的な情報を取得します。
22// 成功した場合、ファイルの情報を含む連想配列を返します。
23// 失敗した場合は (例: ファイルが存在しない、アクセス権がないなど)、false を返します。
24$fileStats = stat($filename);
25
26// stat関数の戻り値がfalseでないかチェックし、エラーハンドリングを行います。
27if ($fileStats !== false) {
28    echo "ファイル '$filename' の静的な情報:\n";
29    echo "--------------------------\n";
30
31    // ファイルサイズ (バイト単位)
32    echo "ファイルサイズ: " . $fileStats['size'] . " バイト\n";
33
34    // 最終更新日時 (Unixタイムスタンプを人間が読める形式に変換)
35    echo "最終更新日時: " . date('Y-m-d H:i:s', $fileStats['mtime']) . "\n";
36
37    // 最終アクセス日時 (Unixタイムスタンプを人間が読める形式に変換)
38    echo "最終アクセス日時: " . date('Y-m-d H:i:s', $fileStats['atime']) . "\n";
39
40    // inode変更日時 (Unixタイムスタンプを人間が読める形式に変換)
41    // inodeはファイルシステム上のファイルのメタデータ情報を保持する構造です。
42    echo "inode変更日時: " . date('Y-m-d H:i:s', $fileStats['ctime']) . "\n";
43
44    // ファイルのパーミッション (八進数表記)
45    // & 0777 を使うことで、ファイルの種類を示すビットを除外し、純粋なパーミッションのみを表示します。
46    echo "パーミッション (八進数): " . sprintf('%o', $fileStats['mode'] & 0777) . "\n";
47
48    // ファイルのデバイスID (ファイルが存在するデバイスのID)
49    echo "デバイスID: " . $fileStats['dev'] . "\n";
50
51    // ファイルのinode番号 (ファイルシステム内でファイルを一意に識別する番号)
52    echo "inode番号: " . $fileStats['ino'] . "\n";
53
54    // ファイルへのハードリンク数
55    echo "ハードリンク数: " . $fileStats['nlink'] . "\n";
56
57    // ファイルの所有者のユーザーID (UID)
58    echo "所有者 (UID): " . $fileStats['uid'] . "\n";
59
60    // ファイルの所有グループのグループID (GID)
61    echo "グループ (GID): " . $fileStats['gid'] . "\n";
62
63    // その他、['blksize', 'blocks'] などの情報も取得できます。
64
65} else {
66    // stat関数がfalseを返した場合のエラーメッセージ
67    echo "エラー: ファイル '$filename' の情報を取得できませんでした。\n";
68    echo "ファイルが存在しないか、スクリプトにアクセス権がありません。\n";
69}
70
71// サンプル用に作成した一時ファイルを削除します。
72// これにより、スクリプトの実行後に不要なファイルが残らないようにします。
73if (file_exists($filename)) {
74    unlink($filename);
75    echo "\n一時ファイル '$filename' を削除しました。\n";
76}
77
78?>

PHPのstat関数は、指定されたファイルの「静的な情報」を取得するために用いられます。ここでいう静的な情報とは、ファイルサイズ、最終更新日時、アクセス日時、ファイルのパーミッション(アクセス権)、所有者IDやグループIDといった、ファイルシステム上でファイルに紐づけられている固定の属性を指します。

この関数は、引数として検査したいファイルのパスを文字列(string $filename)で受け取ります。処理が成功すると、取得したファイル情報が格納された連想配列(array)を返します。この配列には、ファイルサイズはsizeキー、最終更新日時はmtimeキーのように、様々な情報が具体的なキーで格納されています。もしファイルが存在しない、またはアクセス権がないなどの理由で情報の取得に失敗した場合は、戻り値としてfalseが返されるため、戻り値の確認によるエラーハンドリングが重要です。

提供されたサンプルコードでは、まず一時ファイルを作成し、そのファイルに対してstat関数を実行しています。取得した情報からファイルサイズや最終更新日時などを整形して表示し、stat関数がどのような情報を提供するのかを具体的に示しています。また、エラー発生時のメッセージ表示や、サンプル実行後に一時ファイルを適切に削除する処理も含まれており、実用的なプログラミングの例として学ぶことができます。この関数は、ファイル管理ツールやバックアップシステムなど、ファイルシステムの詳細な属性を扱う際に非常に役立ちます。

stat関数は、ファイルのサイズ、更新日時、パーミッションなどの「静的な属性情報」を取得する際に利用します。この関数が成功したかを確認するエラーハンドリングが非常に重要です。ファイルが存在しない場合や、スクリプトにファイルへのアクセス権がない場合はfalseを返しますので、必ずif ($fileStats !== false)のように戻り値をチェックしてください。

また、引数$filenameには検査したいファイルの正しいパスを指定する必要があります。スクリプトを実行するユーザーには、対象ファイルへの読み取り権限が求められます。atime(最終アクセス日時)などの一部情報は、OSやファイルシステムの設定によって期待通りの頻度で更新されない場合があるため、その点を考慮して利用してください。これらの注意点を守ることで、ファイル情報を安全かつ正確に取得できます。

PHP stat() 関数でファイル情報を取得する

1<?php
2
3/**
4 * PHPのstat()関数を使用して、指定されたファイルの情報を取得するサンプルコードです。
5 * stat()関数は、ファイルシステムの「静的な状態」(サイズ、最終更新日時など)を配列として返します。
6 * この関数はPHPの標準機能であり、特定のクラスの静的メソッドではありませんが、
7 * ファイルの状態(ファイルシステムが提供する特定の時点での情報)を取得するという意味で、
8 * 「静的」な情報取得と関連付けて理解することができます。
9 *
10 * @param string $filename 情報取得の対象となるファイルのパス
11 * @return void
12 */
13function displayFileStats(string $filename): void
14{
15    // 事前準備: このスクリプトを実行する前に、指定したパスにファイルが存在することを確認してください。
16    // 例: このPHPファイルと同じディレクトリに 'my_document.txt' というファイルを作成し、
17    // 何らかのテキスト(例: "Hello PHP!")を書き込んでから実行してください。
18    // コマンドラインから作成する例: echo "Hello PHP!" > my_document.txt
19
20    echo "ファイル '{$filename}' の情報を取得します...\n";
21
22    // stat() 関数を呼び出し、ファイルの統計情報を取得します。
23    // 成功した場合はファイルの情報を格納した配列を、失敗した場合は false を返します。
24    $stats = stat($filename);
25
26    if ($stats === false) {
27        // stat() が false を返した場合、ファイルが見つからないか、
28        // アクセス権がないなどの問題が発生しています。
29        echo "エラー: ファイル '{$filename}' の情報を取得できませんでした。\n";
30        echo "ヒント: 指定したファイルが存在するか、PHPスクリプトからアクセスする権限があるか確認してください。\n";
31    } else {
32        echo "--- 取得されたファイル情報 ---\n";
33        echo "  ファイル名: " . basename($filename) . "\n";
34        echo "  ファイルサイズ: " . $stats['size'] . " バイト\n";
35        echo "  最終アクセス時刻: " . date('Y-m-d H:i:s', $stats['atime']) . "\n";
36        echo "  最終変更時刻: " . date('Y-m-d H:i:s', $stats['mtime']) . "\n";
37        // iノード変更時刻 (inode change time) は、ファイルのメタデータが変更された時刻です。
38        echo "  最終iノード変更時刻: " . date('Y-m-d H:i:s', $stats['ctime']) . "\n";
39        // パーミッション (モード) の表示。
40        // mode の値にはファイルタイプ(例: 通常ファイル、ディレクトリ)も含まれるため、
41        // 0777 とAND演算してパーミッション部分(所有者、グループ、その他の権限)のみを抽出します。
42        echo "  パーミッション (8進数): " . sprintf('%o', $stats['mode'] & 0777) . "\n";
43        echo "----------------------------\n";
44
45        // stat()関数が返す全ての詳細な情報を確認したい場合は、以下の行のコメントを解除してください。
46        // echo "--- 全ての詳細情報 ---\n";
47        // var_dump($stats);
48        // echo "----------------------\n";
49    }
50}
51
52// このサンプルコードを実行するには、実際に存在するファイルのパスを指定してください。
53// 例として、このPHPファイルと同じディレクトリにある 'example.txt' を指定します。
54displayFileStats('example.txt');

PHPのstat()関数は、指定されたファイルやディレクトリの「静的な状態」に関する詳細な情報を取得するための関数です。ここで言う「静的な状態」とは、ファイルシステムが提供する特定の時点でのファイルサイズ、最終更新日時、アクセス権限などのメタデータを指します。この関数は特定のクラスに属する静的メソッドではありませんが、ファイルシステム上の固定された時点での情報を取得するという意味で、「静的な情報」を扱います。

引数には情報取得の対象となるファイルのパスを文字列で渡します。関数が成功すると、ファイルに関する様々な情報(例: ファイルサイズ、最終アクセス時刻、最終変更時刻、パーミッションなど)が格納された連想配列または数値添字配列が返されます。もし指定されたファイルが存在しない場合や、アクセス権限がないなどの理由で情報の取得に失敗した場合は、falseが返されます。

サンプルコードでは、displayFileStats()関数がファイルパスを受け取り、stat()関数を呼び出してそのファイルの情報を取得しています。取得に成功した場合は、ファイル名、サイズ、最終更新日時、パーミッションといった主要な情報を整形して表示します。もしstat()関数がfalseを返した場合は、ファイルが見つからないかアクセスできない旨のエラーメッセージを表示し、適切な確認を促しています。これにより、stat()関数の基本的な使い方とともに、戻り値に応じたエラーハンドリングの重要性も理解できます。

PHPのstat()関数は、指定したファイルのサイズや更新日時などの「静的な状態」に関する情報を配列で取得します。しかし、ファイルが見つからない、またはアクセス権がない場合はfalseを返しますので、必ず戻り値の確認と適切なエラー処理を行うようにしてください。この関数は特定のクラスに属する静的メソッドではなく、PHPの標準関数であることを理解することが重要です。「静的」とは、ファイルシステムの特定の時点での情報取得を指します。また、パーミッション情報(mode)はファイルタイプを含むため、パーミッション値のみが必要な場合はビット演算子(& 0777)で抽出することを覚えておきましょう。

関連コンテンツ

【PHP8.x】stat関数の使い方 | いっしー@Webエンジニア