我正在尝试托管一个给我的PHP网站。我看到了这个警告:
警告:未知:您的脚本可能 依赖于会话的副作用 存在直到PHP 4.2.3。请 建议会话扩展 不将全局变量视为 数据来源,除非 register_globals已启用。您可以 禁用此功能和此功能 通过设置警告 session.bug_compat_42或 session.bug_compat_warn to off, 分别。 未知在 0
上
这是什么意思?我如何在代码中追踪这个问题的根源?
答案 0 :(得分:99)
基本上你有一个与你的会话同名的变量。例如:
$_SESSION['var1'] = null;
$var1 = 'something';
将重现此错误。您可以通过将以下行添加到脚本中来阻止PHP尝试查找现有变量并向您发出警告:
ini_set('session.bug_compat_warn', 0);
ini_set('session.bug_compat_42', 0);
这些值也可以在php.ini或.htaccess中设置
答案 1 :(得分:6)
这里似乎存在一些问题:
http://www.spiration.co.uk/post/1231/Your-script-possibly-relies-on-a-session-side-effect
说这样的案例:
$_SESSION['firstname']=$_REQUEST['firstname'];
会触发警告。
此外,我解释这个php错误内容:http://bugs.php.net/bug.php?id=41540意味着当您将一个变量分配给尚未初始化的会话超全局时,也可能发生此错误,例如。
//Start of script
$_SESSION['bob'] = $bob;
答案 2 :(得分:5)
这是关于找出导致警告的重要信息,但我建议不要关闭Owen提到的警告。这些运行时函数是removed in PHP 5.4.0,开发人员应该开始避免使用这些变量。
要解决这个问题,开发人员可能会感到痛苦,但如果你有
$_SESSION["user"]
$user;
将会话重命名为
$_SESSION["sessuser"];
只要会话名称和变量名称不同,或反之亦然。可以这样想:当您升级到最新版本时,无论如何都必须调试代码。
答案 3 :(得分:2)
当您对.htaccess进行更改时,ini_set不起作用。你需要这样做:
php_flag session.bug_compat_42 0
php_flag session.bug_compat_warn 0
答案 4 :(得分:1)
在我的情况下,php.ini从on变为off
像这样:session.bug_compat_42 = off
session.bug_compat_warn = off
如果不能正常工作,请重新启动apache