2011-04-14 82 views
0

我在Localhost和服務器「Aruba」上測試此代碼。

在本地環境中它完美而上服務器我沒有預期的會話值

當我回聲出$ _SESSION [「郎」]它輸出:

-the正確的國家代碼(Ex.'en)

- 在Aruba服務器上$ _SESSION ['lang']輸出名爲$ lang的數組(您可以在lang.en.php上找到),而不是所需的國家代碼! !

我在哪裏錯了?

感謝

盧卡

home.php

require_once('/web/htdocs/www.mywebsite.com/home/includes/langSwitcher.inc'); 
echo $_SESSION['lang']; 
[..] 

langSwitcher.inc

session_start(); 
header('Cache-control: private'); // IE 6 FIX 

if(isset($_GET['lang'])) 
{ 
$lang = $_GET['lang']; 

// register the session and set the cookie 
$_SESSION['lang'] = $lang; 

setcookie('lang', $lang, time() + (3600 * 24 * 30)); 
} 

else if(isset($_SESSION['lang'])) 
{ 
$lang = $_SESSION['lang']; 
} 

else if(isset($_COOKIE['lang'])) 
{ 
$lang = $_COOKIE['lang']; 
$_SESSION['lang']=$lang; 
} 
else 
{ 
$lang = 'en'; 
$_SESSION['lang']=$lang; 

} 

switch ($lang) 
{ 
case 'en': 
$lang_file = 'lang.en.php'; 
break; 

case 'it': 
$lang_file = 'lang.it.php'; 
break; 

} 

include_once $lang_file; 

lang.en.ph p

/* 
----------------- 
Language: Italian 
----------------- 
*/ 



$langcode='en'; 

$lang = array(); 

$lang['PAGE_TITLE'] = 'pagetitle'; 

$lang['HEADER_TITLE'] = 'title header '; 

$lang['SITE_NAME'] = 'name site'; 

$lang['HEADING'] = 'title'; 
+0

在lang.en.php hai scritto「語言:意大利語」... – Shoe 2011-04-14 13:02:32

回答

1

聽起來像register_globals可能啓用(雖然該功能已棄用)。您可以運行phpinfo()並查找register_globals條目。

假設它已啓用,唯一的解決方法是將其修復爲php.ini(您不能用ini_set()調用覆蓋register_globals)。

+0

解決了謝謝,我永遠無法自己調整這個!很棒=) – luca 2011-04-14 12:57:31

0

那麼你使用$ lang來保存langcode,而且還要存儲數組信息。也許在langSwitcher.inc中,您應該使用$ langcode來存儲會話?

因爲你也在設置他們的會話$ lang var。在你的服務器上,它似乎使用了一個對$ lang文件的引用,因此輸出設置爲$ lang(這是數組)的最新內容,並在本地存儲$ lang的實際內容。

無論如何,它可以通過不使用相同的變量名來存儲兩個不同的項目來解決。