WordPress プラグインを作成していますが、一部のサーバーで、特定のファイルに対してstat
(またはfilemtime
) が無効なmtime値を返すことがわかります。場合によっては、負の値または非常に大きな値 (30 億以上) になります。
FTP では、タイムスタンプが正しいことがわかります。
PHP タイムスタンプで負の数を取得すると、Unix エポックの数秒前に過ぎず、これに限定されません。filemtime
例A
echo strtotime("1950-1-1"); // Outputs -631155600
^------- negative value
例 B
負の値を出力しても、正しくフォーマットできないわけではありません。
echo date("Y-m-d",-631155600); // Output 1950-01-01
最後に
FTP I can see that the timestamp is correct though
あなたの FTP アプリケーションは間違いなく PHP ではなく、独自の内部日付システムを持っています。その日付システムは、タイムスタンプに負の値を使用しない可能性があります。
filemtimeに負の値を返すファイルのサイズはどれくらいですか?
http://php.net/manual/en/function.stat.php「PHPの整数型は署名されており、多くのプラットフォームは32ビット整数を使用しているため、一部のファイルシステム関数は2GBを超えるファイルに対して予期しない結果を返す場合があります。 。」
サーバーが ntp デーモンを実行している場合、これはリクエスト内の時間を設定した結果である可能性があります。これは、Apache ログや、UNIX システム関数に依存するその他のものでも発生します。
Unix タイムスタンプの現在の値は約 1,356,197,722 なので、10 億が妥当です。
問題になる可能性は低いですが、filemtime() を呼び出す前に、http://php.net/manual/en/function.clearstatcache.php について理解し、それを使用することをお勧めします。
私の理解が正しければ、あなたが探しているのは非常に大きな値です。これは Unix タイム スタンプです。
このようなことを試しましたか?
date ("F d Y H:i:s.", filemtime($filename))
filemtime
1970 年 1 月 1 日から経過した秒数を返します。これは実際には非常に大きな値です。上記の例のようなものを使用して、これらの秒を人間が判読できるものに変換するのはあなた次第です。
一方、これを認識していて、大きな値がまだ間違っていると思われる場合は、予想される日付とともに、その値の例を投稿すると役立つ場合があります。