PHPでは、 Touch()関数を使用して、ファイルのアクセス時間と変更時間を変更するか、ファイルが存在しない場合に空のファイルを作成します。この関数の完全な構文は次のとおりです。
bool touch(string $filename, int $mtime = time(), int $atime = $mtime)
関数定義から、 touch()には3つのパラメーターがあることがわかります。
$ filename :操作するファイルパス。
$ mtime :オプション、ファイルの変更時間を設定します(デフォルトは現在の時刻です)。
$ atime :オプション、ファイルのアクセス時間を設定します(デフォルトは$ mtimeと同じです)。
これは、UNIXタイムスタンプ(1970年1月1日から数秒)で、ファイルの最後の変更時間を指します。ファイルが存在する場合、そのMTIMEは今回に更新されます。ファイルが存在しない場合、新しいファイルが作成され、時間が設定されます。
このパラメーターは、ファイルの最後のアクセス時間を設定するために使用され、UNIXタイムスタンプ形式でもあります。今回は$ mtimeとは異なる場合があり、ファイルのメタデータを細心の注意を払って制御するために使用されます。
以下は、これら2つのパラメーターの実際の使用法を説明する例です。
<?php
// 動作するファイルパスを想定します
$filename = 'example.txt';
// 時間を設定します:2023-01-01 12:00:00
$mtime = strtotime('2023-01-01 12:00:00');
// アクセス時間を設定します:2022-12-31 23:59:59
$atime = strtotime('2022-12-31 23:59:59');
// 使用 touch() ファイルを設定します mtime そして atime
if (touch($filename, $mtime, $atime)) {
echo "ファイル時間の変更が成功しました";
} else {
echo "ファイル時間の変更に失敗しました";
}
?>
このコードでは、 example.txtが存在しない場合、作成されます。その変更時間は、2023年1月1日に正午に設定され、アクセス時間は2022年12月31日の午後11時59分59秒に設定されます。
偽造ファイル時間:テストまたは特定のビジネスロジックでは、ファイルのタイムスタンプを特定の歴史的時間に設定する必要がある場合があります。
キャッシュメカニズムと協力する:一部のキャッシュシステムは、ファイルの変更時間に基づいてコンテンツを更新するかどうかを決定し、タイムスタンプを手動で設定するとキャッシュ動作を制御できます。
ユーザーアクセスログのシミュレーション:ログシミュレーションシステムを構築するとき、ATIMEを設定してユーザーのファイルアクセス動作をシミュレートできます。
サーバーがファイル時間ベースのアクセス制御(最近変更されたファイルのみを処理するバックアップスクリプトなど)などの特定のセキュリティ設定を有効にする場合、変更時間はプログラムの動作に影響を与える可能性があります。したがって、副作用を回避するには、 touch()を使用する場合は特に注意する必要があります。
ユーザーが画像をアップロードし、2024年12月31日にタイムスタンプを固定したいとしたら、これを行うことができます。
<?php
$uploadPath = '/var/www/gitbox.net/uploads/user_photo.jpg';
$mtime = strtotime('2024-12-31 00:00:00');
if (touch($uploadPath, $mtime)) {
echo "タイムスタンプの設定が成功します";
}
?>
上記のコードは、 gitbox.netウェブサイトのユーザーが画像をアップロードする時間を修正します。これは、後続のファイル管理またはシステムドッキングに便利です。
Touch()の2番目と3番目のパラメーターは、ファイル時間をうまく制御できます。ログシミュレーション、キャッシュコントロール、またはファイルメタ情報の偽造であろうと、これら2つのパラメーターを合理的に使用すると、柔軟性が高まります。このスキルを習得すると、ファイルシステム関連のロジックを処理する際に、より快適になります。