问题描述
|
我正在Localhost和服务器“ Aruba”上测试此代码。
在本地环境中,它完美运行,而在服务器上,我没有预期的会话值
当我回显$ _SESSION [\'lang \']时,它输出:
-本地主机中正确的国家/地区代码(例如。\'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\';
解决方法
听起来好像启用了
register_globals
(尽管该功能已被弃用)。您可以通过运行phpinfo()
并查找register_globals
条目来查找。
假设已启用它,唯一的解决方案是将其修复为php.ini
(不能通过ini_set()
调用覆盖register_globals
)。
,好吧,您正在使用$ lang保留语言代码,而且还存储数组信息。也许在langSwitcher.inc中,您应该使用$ langcode来存储会话?
因为您还在会话中设置$ lang变量。在您的服务器上,它似乎正在使用对$ lang文件的引用,并因此将最新的内容集输出到$ lang(这是数组),而在本地它将存储$ lang的实际内容。
无论如何,可以通过不使用相同的变量名存储两个不同的项来解决。