-2

次のロジックを使用して、保存されている UNIX タイムスタンプが 14 時間より古いかどうかを確認するスクリプトがあります。

if ($data['today'][$city]['max']['imported'] < (time() - 50400)) { 
    // bad stuff
} else {
    // good stuff
}

これが 10 分ごとに (CRON ジョブを介して) 実行されている 6 日ほどの間に、明確な理由もなく、1 日の一見ランダムな時間に 4 回「悪いもの」になりました。$data['today'][$city]['max']['imported'] の値は、スクリプトが実行されるたびに配列形式に変換される XML ファイルから取得されます。8 つの都市があり、この計算はそれらを反復するループ内にあります (したがって $city)。XML はテキスト ファイルに保存されます。

前回発生したとき、$data['today'][$city]['max']['imported'] 値の保存を実装しましたが、それは間違いなく有効でした (つまり、10 分前)。

私が見逃した明らかなものはありますか?

また、タイムスタンプが 14 時間より古いかどうかを確認するためのより信頼できる方法を誰かが知っていれば、私は感謝します - これは PHP 5.1.something で動作する必要があるため、DateTime クラスにアクセスできません。

4

2 に答える 2

1

コードにまったく問題はありません。コードは問題なく完全に機能するはずです。唯一の弱点は$city、xml ファイルから取得される値です。xml には 8 つの都市しかないとおっしゃいましたが、別の都市の人の場合、デフォルト値はありますか?

問題を解決する 1 つの方法は$data['today'][$city]['max']['imported']、if ステートメントを使用する前に値を確認することです。

次のようなものが役立ちます。文字列に 10 文字が含まれているかどうかを確認します。

if (strlen($data['today'][$city]['max']['imported'] == 10) { 
//your code here
}
于 2013-03-07T02:28:55.357 に答える
1

diff()そのタイムスタンプの計算をPHP のDateTimeクラスからの計算に置き換えます。お持ちのように、計算では年に 2 回、正しい結果が得られません。夏時間により 1 時間の加算または減算が行われるときです。

それ以外に、発生している問題は$data['today'][$city]['max']['imported']、サーバー間のタイムゾーンの違いによるタイムスタンプの不一致、およびタイムスタンプの送信元がどこであっても、値が正しくないことに関係している可能性が最も高いですimported

于 2013-03-07T01:55:55.250 に答える