2012-04-23 81 views
0

我目前正在運行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) 
+0

如果將'up2date'更改爲'update',該怎麼辦?我從來沒有成功地在變量名中使用數字 – 2012-04-23 19:43:37

+0

沒有幫助。此外,它在本地(同一臺瀏覽器,同一臺機器)上運行,並且在過去工作過。直到最近,當我改變它使用'strtotime',它停止工作。我只是將它改回來,但如果它適用於一個,爲什麼不是兩個? – mseancole 2012-04-23 19:46:28

+0

這是文件被髮送到filemtime()可能的權限問題?在讀取filemtime() – 2012-04-23 19:46:43

回答

0

感謝DaveRandom。他在這裏值得信任,如果他加了他的答案,我會把我接受的轉換爲他的。我剛添加了這個答案,所以我沒有任何未解答的問題。

解決方案:我在調用第二個cookie之前輸出了,因此無法設置它。我剛剛搬到了設置cookie的地方。

謝謝大家的建議和時間!