我目前正在運行2個版本的PHP。我的本地(測試)服務器有5.3.5,而我的遠程(實時)服務器有5.2.4。這在過去造成了一些兼容性問題,但我一直可以很容易地修復它們。很快我的遠程服務器就會升級,所以它不會造成太多問題,但同時我仍然需要爲這些愚蠢的兼容性問題提供解決方案。請問下面的代碼請看看我的代碼,並讓我知道他們是否發現5.2.4 PHP版本的任何問題?PHP的setcookie只能間歇性地工作(版本兼容性?)
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。我認爲這很奇怪,但認爲它與返回false的strtotime
函數有關。所以我試着先修復。在查閱了PHP手冊之後,我確定我使用的字符串僅在5.3版本上可用。在那裏,問題證實,易於修復。我用'+1月'字符串替換它,我知道它將在5.2上工作。成功,我的「用戶」cookie現在已經過期了。除了我還沒有「up2date」cookie。 var_dump
證明該函數被調用來設置它並具有所有正確的參數,但它不設置第二個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)
如果將'up2date'更改爲'update',該怎麼辦?我從來沒有成功地在變量名中使用數字 – 2012-04-23 19:43:37
沒有幫助。此外,它在本地(同一臺瀏覽器,同一臺機器)上運行,並且在過去工作過。直到最近,當我改變它使用'strtotime',它停止工作。我只是將它改回來,但如果它適用於一個,爲什麼不是兩個? – mseancole 2012-04-23 19:46:28
這是文件被髮送到filemtime()可能的權限問題?在讀取filemtime() – 2012-04-23 19:46:43