PHPでファイルのタイムスタンプを知るには?|ctimeはOSによって内容が異なる!

PHPのファイルのタイムスタンプにはmitime、ctime、atimの3つがあります。そのうちのctimeについては、OSによって内容が異なるので注意が必要です。

ここでは、PHPでのファイルのタイムスタンプについての留意点や取得するための関数の使い方を紹介します。

PHPプログラミングに興味のある方は、プログラミング学習の参考としてここでしっかり内容をおさえておきましょう。

PHPのファイルタイムスタンプは3種類

PHPではファイルの属性としてタイムスタンプを取得することができます。取得できるタイムスタンプは以下の3つです。

タイム
スタンプ
概要 説明
mtime 最終更新時刻 ファイルのデータを更新した場合に変化します
atime 最終アクセス時刻 ファイルにアクセスした場合には変化します。
データを更新しなくても変化します。
ctime 最終inode更新時刻 パーミッションや所有者idなどを更新した場合に変化します。
また、データ更新した場合も変化します。

これらの値は、UNIXタイムスタンプで記録されています。

UNIXタイムスタンプとは、協定世界時(UTC)での1970年1月1日0時0分0秒からの経過時間を秒数で表したものです。

タイムスタンプを見てわかるように年月日で表示するには、フォーマットを指定する必要があります。

【PHP入門】よくわかるdate関数!
【PHP入門】よくわかるdate関数!
最近庭の雑草が元気すぎて、草むしりが追いつかないライカです。 今回は 「日付を表示させるためにはdate関数を ...

ファイルのタイムスタンプはOSによって扱いが異なる

各OSが採用しているファイルシステムによって、タイムスタンプの種類や内容に相違があります。

ファイル更新時刻などをOSのコマンドで参照している場合にはあまり意識しませんが、PHPプログラムで直接タイムスタンプを操作する場合は留意が必要です。

以下にLinuxとWindowsの場合を示します。

Linuxの場合

代表的な操作におけるタイムスタンプの更新状況は以下のとおりです。

タイムスタンプ mtime atime ctime
定義 最終更新時刻 最終アクセス時刻 inode最終更新時刻
新規作成(touch) 更新 更新 更新
データ変更
(viで更新)
更新 更新 更新
データ参照(cat) 更新
権限変更(chmod) 更新 更新

この表からわかるように、Linuxではctimeはデータ内容やファイル管理情報の変更によって更新されます。

なお、EXT4などのファイルシステムを除き、Linuxではファイルの作成時刻は記録されません。

Windowsの場合

代表的な操作におけるタイムスタンプの更新状況は以下のとおりです。

タイムスタンプ mtime atime ctime
 定義 最終
更新時刻
最終
アクセス時刻
新規
作成時刻
新規作成
(エディタなど)
更新 更新 更新
データ変更
(エディタなど)
更新 更新
権限変更(アクセス許可) 更新

この表からわかるように、Windowsではctimeはファイルの作成時刻を保持するもので、内容変更や管理情報の変更があっても更新されません。

PHPで今日の日付を取得したい!現在日時を表示する方法をご紹介
PHPで今日の日付を取得したい!現在日時を表示する方法をご紹介
PHPでWEBサービスを作っていると、 「今日の日付を表示させたい!」 という場面もあるのではないでしょうか。 ...

タイムスタンプの値を知るには

filectime

ファイルの inode 変更時刻を取得する

パラメータ
パラメータ 説明
$filename string ァイルへのパス。
戻り値
  • ・ファイルの最終更新時刻を示す Unix タイムスタンプ。
  • ・失敗した場合に false を返します。

fileatime

ファイルの最終アクセス(access)時刻を取得する

パラメータ
パラメータ 説明
$filename string ァイルへのパス。
戻り値
  • ・ファイルの最終アクセス時刻を示す Unix タイムスタンプ。
  • ・失敗した場合に false を返します。

filemtime

ファイルの更新(modify)時刻を取得する

パラメータ
パラメータ 説明
$filename string ァイルへのパス。
戻り値
  • ・ファイルの最終更新時刻を示す Unix タイムスタンプ。
  • ・失敗した場合に false を返します。

タイムスタンプの使用例

ここではOSによってctimeをはじめタイムスタンプの内容が異なることを使用例で示します。なお、Linuxはwsl2での実行結果です。

結果(Windows)

結果(Linux)

fstat() / stat()

ファイルのタイムスタンプを知るには、 fstat() 関数や stat() 関数を使うこともできます。
fstat() 関数は、オープンしたファイルポインタからファイルに関する情報を取得します。
stat() 関数は、ファイル名を指定してファイルに関する情報を取得します。

fstat

パラメータ
パラメータ 説明
$handle resource fopen() を使用して作成したファイルシステムポインタリソース。
戻り値
  • ・ファイルの統計情報の配列。

stat

パラメータ
パラメータ 説明
$filename string ファイルへのパス。
戻り値
  • ・ファイルの統計情報の配列。

なお、ファイルの統計情報の配列のフォーマットは以下のとおりです。

数値 連想配列 説明
0 dev デバイス番号
1 ino inode番号(Windowsでは0)
2 mode inodeプロテクトモード
3 nlink リンク数
4 uid 所有者のユーザーID(Windowsでは0)
5 gid 所有者のグループID(Windowsでは0)
6 rdev inodeデバイス の場合、デバイスの種類
7 size バイト単位のサイズ
8 atime 最終アクセス時間 (Unix タイムスタンプ)
9 mtime 最終修正時間 (Unix タイムスタンプ)
10  ctime 最終 inode変更時間 (Unix タイムスタンプ)
11 blksize ファイル IO のブロックサイズ(Windowsでは-1)
12 blocks 512 バイトのブロックの確保数(Windowsでは-1)

ファイルを読み書きするには以下の記事を参考にしてください。

PHPでファイルの読み書きする3つの方法(fopen/file/file_get_contents・file_put_contents)
PHPでファイルの読み書きする3つの方法(fopen/file/file_get_contents・file_put_contents)
今回はPHPでファイルの入出力について解説します。 ファイルの入出力はPHPに限らずプログラミング言語の基本中 ...

まとめ

いかがでしたか? 今回は、PHPでのファイル時刻属性を取り出す関数について説明しました。

ファイル時刻属性は各OSが採用するファイルシステムで管理されており、OSによって扱いが異なる場合があります。タイムスタンプctimeをその例として説明しました。

この記事が、PHPプログラミング学習の参考としてお役に立てば幸いです。

BLOGコンテンツをパーソナライズします

あなたは現在「プログラミング学習者」ですか?