6

我只是突然开始遇到我见过的最奇怪的问题,除了我网站的主机之外什么都没有改变。我在代码中使用了很多 $_SESSION 变量,这些变量可能与普通变量同名,但设置普通变量似乎是在更改具有相同名称的 $_SESSION 变量。

例如,如果我这样做

$_SESSION['favcolor'] = 'blue';
$favcolor = 'green';
echo $_SESSION['favcolor'];

我得到green了回应......我怎么不让这种情况发生?我认为很可能有一些 PHP ini 变量必须更改,但我似乎在这方面找不到任何东西......


解决方案

因此,由于我在不同的主机上托管我的网站,所以我必须按照以下方式进行。我创建了一个php.ini文件并将其放在我网站文件的根目录中,其中仅包含以下行:

register_globals = Off ;notice the capital 'O' in 'Off'

然后在我的 .htaccess 文件中,我将其添加到文件末尾:

<IfModule mod_suphp.c>
suPHP_ConfigPath /home/myhostusername/public_html/stumpyinc.com
<Files php.ini>
order allow,deny
deny from all
</Files>
</IfModule>

不再有冲突的变量!我也从这次经历中学到了一些东西,并做了一些进一步的研究;变量和会话变量无论如何都不应该相同。这是一个很好的实践,我将在接下来的编程中开始使用它。

4

1 回答 1

9

好像register_globals开启了 这将导致像你正在经历的冲突。您的主机可能在配置服务器时忘记关闭它们。一旦他们这样做了,您的问题就应该消失了。

如果他们拒绝将其关闭,请寻找新的主机。不仅应该register_globals关闭,而且它们已被弃用,并将在下一版本的 PHP 中删除。

于 2012-12-30T05:37:55.727 回答