strptime()を使用していくつかの調査を行い、それを解決できるように見えました。これはテストされていないことに注意してください。私は、strptime()が与えられたタイムゾーンに基づいて文字列をGMTに正しく変換すると推測しています。これは少なくともあなたを始めさせるはずです。
$in = $_SERVER['HTTP_DATE'];
$out = 0;
$strptime_patterns = array(
// Matches: Sun, 06 Nov 1994 08:49:37 GMT
'%a, %d %h %Y %H:%M:%S %z',
'%a, %d %h %Y %H:%M:%S %Z',
// Matches: Sunday, 06-Nov-94 08:49:37 GMT
'%A, %d-%h-%y %H:%M:%S %z',
'%A, %d-%h-%y %H:%M:%S %Z',
// Matches: Sun Nov 6 08:49:37 1994
'%a %h %e %H:%M:%S %Y'
);
foreach ($strptime_patterns as $pat) {
if ($arr = strptime($in, $pat)) {
$out = mktime($arr['tm_hour'], $arr['tm_min'], $arr['tm_sec'], $arr['tm_mon'], $arr['tm_mday'], $arr['tmp_year'] + 1900);
break;
}
}
if ($out > gmmktime()) {
// Invalid date - in the future
} elseif ($out >= gmmktime() - (15 * 60)) {
// Valid, not expired
} elseif ($out > 0) {
// Valid date, but expired
} else {
// Invalid date
}
Evertは "今"のような "ハック"を心配しているので、gmmktime()> =有効な日付> = gmmktime() - (15 * 60) – VolkerK
をテストする必要があります。あなたはいつもあなたのウェブサービスを悪用しようと時間を遡って旅行するユーザーのために気をつけなければなりません;) – pix0r
これは間違いなく私を始めます..ありがとう! – Evert