11

WordPress プラグインを作成していますが、一部のサーバーで、特定のファイルに対してstat(またはfilemtime) が無効なmtime値を返すことがわかります。場合によっては、負の値または非常に大きな値 (30 億以上) になります。

FTP では、タイムスタンプが正しいことがわかります。

4

5 に答える 5

11

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 ではなく、独自の内部日付システムを持っています。その日付システムは、タイムスタンプに負の値を使用しない可能性があります。

于 2012-12-17T10:13:36.140 に答える
0

filemtimeに負の値を返すファイルのサイズはどれくらいですか?

http://php.net/manual/en/function.stat.php「PHPの整数型は署名されており、多くのプラットフォームは32ビット整数を使用しているため、一部のファイルシステム関数は2GBを超えるファイルに対して予期しない結果を返す場合があります。 。」

于 2012-12-19T11:38:13.823 に答える
0

サーバーが ntp デーモンを実行している場合、これはリクエスト内の時間を設定した結果である可能性があります。これは、Apache ログや、UNIX システム関数に依存するその他のものでも発生します。

于 2012-12-16T15:10:40.327 に答える
0

Unix タイムスタンプの現在の値は約 1,356,197,722 なので、10 億が妥当です。

問題になる可能性は低いですが、filemtime() を呼び出す前に、http://php.net/manual/en/function.clearstatcache.php について理解し、それを使用することをお勧めします

于 2012-12-22T17:38:18.187 に答える
0

私の理解が正しければ、あなたが探しているのは非常に大きな値です。これは Unix タイム スタンプです。

このようなことを試しましたか?

date ("F d Y H:i:s.", filemtime($filename))

filemtime1970 年 1 月 1 日から経過した秒数を返します。これは実際には非常に大きな値です。上記の例のようなものを使用して、これらの秒を人間が判読できるものに変換するのはあなた次第です。

一方、これを認識していて、大きな値がまだ間違っていると思われる場合は、予想される日付とともに、その値の例を投稿すると役立つ場合があります。

于 2012-12-13T20:44:11.227 に答える