以全局variables作为数据源的PHP会话副作用警告
我正在尝试托pipe一个给我的PHP网站。 我看到这个警告:
警告:未知:您的脚本可能依赖于PHP 4.2.3之前存在的会话副作用。 请注意,会话扩展不会将全局variables视为数据源,除非启用了register_globals。 您可以通过分别将session.bug_compat_42或session.bug_compat_warn设置为off来禁用此function和此警告。 在第0行的未知
这是什么意思? 我如何在代码中追踪这个问题的根源?
基本上你有一个与会话同名的variables。 例如:
$_SESSION['var1'] = null; $var1 = 'something';
这将重现此错误。 您可以停止PHP试图find现有的variables,并通过将这些行添加到您的脚本警告你:
ini_set('session.bug_compat_warn', 0); ini_set('session.bug_compat_42', 0);
这些值也可以在php.ini或.htaccess中设置
这里似乎有一些问题的可能性:
http://www.spiration.co.uk/post/1231/Your-script-possibly-relies-on-a-session-side-effect
说这样的例子:
$_SESSION['firstname']=$_REQUEST['firstname'];
会触发警告。
另外,我解释了这个php bug的内容: http : //bugs.php.net/bug.php?id=41540表示这个错误也可能发生,当你将一个variables分配给尚未初始化的会话超全局时,例如
//Start of script $_SESSION['bob'] = $bob;
这是发现是什么导致警告的好信息,但我会build议不要closures欧文提到的警告。 这些运行时function在PHP 5.4.0中被删除,开发人员应该避免使用这些variables。
要解决这个问题,开发人员可能会很痛苦,但是如果有的话
$_SESSION["user"] $user;
将会话重命名为
$_SESSION["sessuser"];
或者反之亦然,只要会话名称和variables名称不同。 想想这样:当你升级到最新的版本时,你将不得不debugging你的代码。
当您对.htaccess进行更改时,ini_set不起作用。 您将需要这样做:
php_flag session.bug_compat_42 0 php_flag session.bug_compat_warn 0
在我的情况下,php.ini从开到关
喜欢这个 :
session.bug_compat_42 = off session.bug_compat_warn = off
如果不工作,重新启动Apache