割り当てられた時間が経過したかどうかを確認する次のコードがあります。私のデモでは、すべて false と評価され、何も起こらないはずです。これまでに起こったことは、たとえそれを >=
なぜこの奇妙な動作をするのですか?
$data = '[{"ip":"80.61.150.173","endtime":1343988643},{"ip":"80.61.150.173","endtime":1343988649},{"ip":"80.61.150.173","endtime":1343988650},{"ip":"80.61.150.173","endtime":1343988664},{"ip":"80.61.150.173","endtime":1343988682},{"ip":"80.61.150.173","endtime":1343988723}]';
$json = json_decode($data,true);
foreach($json as $key => $obj)
{
var_dump($obj);
echo "<BR>";
var_dump(time());
echo "<BR>";
if($obj['endtime'] <= time());
{
echo "<BR>bliep<P>";
}
}
このコードは次の結果に評価されます。
array(2) { ["ip"]=> string(13) "80.61.150.173" ["endtime"]=> int(1343988643) }
int(1343981967)bleep array(2) { ["ip"]=> string(13) "80.61.150.173" ["endtime"]=> int(1343988649) }
int(1343981967)ブリープ
array(2) { ["ip"]=> string(13) "80.61.150.173" ["endtime"]=> int(1343988650) }
int(1343981967)ブリープ
array(2) { ["ip"]=> string(13) "80.61.150.173" ["endtime"]=> int(1343988664) }
int(1343981967)ブリープ
array(2) { ["ip"]=> string(13) "80.61.150.173" ["endtime"]=> int(1343988682) }
int(1343981967)ブリープ
array(2) { ["ip"]=> string(13) "80.61.150.173" ["endtime"]=> int(1343988723) }
int(1343981967)ブリープ
ご覧のとおり、あってはならないすべてのブリープがあります。タイムスタンプは整数で、現在の時刻は保存された時刻よりも小さいです。簡単に比較できるはずですが、常に true と評価されますが、現在は保存されているタイムスタンプよりも小さくなっています。
何が起きてる?
このコードはhttp://writecodeonline.com/php/でもtrueと評価されるため、私のサーバーではありません