我正在Localhost和服务器“Aruba”上测试此代码。
在本地环境中它完美运行,而在服务器上我没有预期的会话值
当我回显$ _SESSION ['lang']时,它输出:
- localhost中正确的国家/地区代码(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.php
/*
-----------------
Language: Italian
-----------------
*/
$langcode='en';
$lang = array();
$lang['PAGE_TITLE'] = 'pagetitle';
$lang['HEADER_TITLE'] = 'title header ';
$lang['SITE_NAME'] = 'name site';
$lang['HEADING'] = 'title';
答案 0 :(得分:1)
听起来register_globals
可能已启用(尽管该功能已弃用)。您可以通过运行phpinfo()
并查找register_globals
条目来查找。
假设它已启用,唯一的解决方案是在php.ini
中修复它(您无法通过register_globals
调用覆盖ini_set()
。
答案 1 :(得分:0)
你使用$ lang来保存langcode,还要存储数组信息。也许在langSwitcher.inc中你应该使用$ langcode存储会话?
因为您还在会话中设置了$ lang var。在您的服务器上,它似乎使用了对$ lang文件的引用,因此将最新的内容集输出到$ lang(这是数组),在本地它存储了$ lang的实际内容。
无论如何,可以通过不使用相同的变量名来存储两个不同的项来解决它。