現在、2つのバージョンのPHPを実行しています。ローカル(テスト)サーバーには5.3.5があり、リモート(ライブ)サーバーには5.2.4があります。これにより、過去にいくつかの互換性の問題が発生しましたが、私は常にそれらを非常に簡単に修正することができました。すぐに私のリモートサーバーがアップグレードされるので、それほど多くの問題が発生することはありませんが、それまでの間、これらの愚かな互換性の問題の解決策を提供する必要があります。誰かが以下の私のコードを見て、5.2.4PHPビルドの問題を見つけたら教えてください。
function _cookie($name, $value) {
$expire = strtotime('+1 month');
$old_expire = strtotime('last day of next month');
setcookie(
$name,
$value,
$expire
);
var_dump($name, $value, $expire, $old_expire);
}
$date = date(
'Y-m-d H:i:s',
filemtime($file)
);
_cookie('user', 'bob');//works
_cookie('up2date', $date);//does not
私はもともと「来月の最終日」をCookieの有効期限として持っていたので、まだvar_dump
リストに残っています。ただし、その文字列はリモートサーバーでfalseを返し、セッションの終了時にCookieが期限切れになりました。falseが返されても、「ユーザー」Cookieが設定され、ブラウザで表示できました。ただし、「up2date」Cookieは設定されません。これは奇妙だと思いましたが、strtotime
関数がfalseを返すことと関係があると考えました。だから私は最初にそれを修正しようとしました。PHPのマニュアルを調べた結果、使用している文字列は5.3でのみ使用可能であることがわかりました。そこで、問題が確認され、簡単に修正できます。これを「+1month」文字列に置き換えました。これは5.2で機能することがわかっています。成功しました。「ユーザー」Cookieの有効期限が切れました。var_dump
関数が呼び出されて設定され、すべての正しいパラメーターが設定されているが、2番目のCookieが設定されていないことを証明します。それがまったく機能しなかったとしても、私はそれほどイライラすることはないでしょう。それは少なくとも私が何か間違ったことをしていて、それを取り除くことができたことを私に教えてくれるでしょう。しかし、それが私をこのようにからかうために...私は何が欠けていますか?誰かアイデアはありますか?
var_dumpの結果:
//Local server
string(4) "user"
string(3) "bob"
int(1337797496)
int(1338488696)
string(7) "up2date"
string(19) "2012-04-20 10:52:09"
int(1337797496)
int(1338488696)
//Remote server
string(4) "user"
string(3) "bob"
int(1337795061)
bool(false)
string(7) "up2date"
string(19) "2012-04-23 09:14:19"
int(1337795061)
bool(false)