0

我在 Session 变量中存储了一些数据。我希望 $_SESSION['hero'] 保存一组对象。我在下面使用的语法在我的本地环境和我的一个托管帐户上运行良好。但是,它无法在我正在测试的另一个托管帐户上运行。在新的托管环境上对该脚本的第二次请求时,对象数组就变成了一个对象。

我认为我使用的 PHP 版本可能是问题所在。经过检查,我发现我在本地使用 PHP 5.4.7,在两个托管帐户上使用的是 5.2.17。由于两个托管帐户都使用 PHP 5.2.17,看来 PHP 版本不是问题。

php.ini 文件中是否有一些我不知道的设置可能导致代码无法在一个托管帐户中工作?其他一些服务器设置?我的代码/理解有问题?任何建议表示赞赏。

这是我在每个托管帐户上运行此代码时得到的输出图像。

良好的输出 - http://imgur.com/Ed8MTkr,zm9WaeV#1

输出错误 - http://imgur.com/Ed8MTkr,zm9WaeV#0

<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);

$_SESSION['hero'][] = new Stdclass();
$heroIndex = count($_SESSION['hero']) - 1;
echo 'Last position in array: ' . $heroIndex;

echo '<pre>';
print_r($_SESSION['hero']);
echo '</pre>';

$hero = $_SESSION['hero'][$heroIndex]; //Seems to be the trouble line

echo '<pre>';
print_r($_SESSION['hero']);
echo '</pre>';
?>

编辑已解决

感谢污垢,它是 register_globals。

我通过在本地环境的 php.ini 文件中将 register_globals 从“Off”设置为“On”来测试它,这重现了我在新托管服务器上遇到的意外行为。

然后我将以下行添加到托管服务器上的 .htaccess 文件中(似乎服务器不会使用我的 php.ini 文件)。

php_flag register_globals off

很高兴知道修复,现在开始研究这个以更好地理解为什么它不起作用。=)

4

1 回答 1

0

也许你应该尝试使用它像一个数组一样

$_SESSION['hero']['heroIndex'] = count($_SESSION['hero']) - 1;

$hero = $_SESSION['hero']['heroIndex'];
于 2013-03-29T03:37:21.593 回答