有人可以确认以下是PHP 5.2.13的错误:(谢谢)
<?php
session_start();
if (!is_array($_SESSION["breadcrumb"]["trail"]))
{
$_SESSION["breadcrumb"]["trail"][] = "trail";
}
foreach ($_SESSION["breadcrumb"]["trail"] as $breadcrumb)
{
echo $breadcrumb;
}
?>
上面的PHP脚本在第3次运行时崩溃了。 foreach()循环似乎有一个(不正确的)副作用,它会消除嵌套的$ _SESSION数组,因为循环中使用的内部变量与嵌套的$ _SESSION数组的名称相匹配。只需将内部foreach()变量的名称更改为不同的名称即可解决问题。
注意:在运行脚本3次之前清除会话变量。
同样,将“$ breadcrumb”更改为“$ the_breadcrumb”可以解决问题。但是foreach()循环应该没有副作用。注意:由于$ breadcrumb的范围与$ _SESSION [“breadcrumb”]的范围不同,因此不应该发生冲突。
请注意,在数组上执行print_r()会将数组显示为第一次(正确)为空,第二次(正确)填充,并错误地设置为“Array([breadcrumb] =&gt; trail)”第三次(嵌套数组已被删除)。
第3次运行的PHP错误日志中的错误: PHP致命错误:不能在第5行使用字符串偏移作为数组
问题不是PHP 5.3上的问题 - 只有PHP 5.2.13。我在PHP网站(php.net)的PHP更新日志中找不到关于此问题的任何注释,我必须在我的实际网站上使用5.2.13,所以我在这里发帖,希望有人可以确认。我还在php.net上发布了一个错误报告。
谢谢, Dan Nissenbaum
第5行没有PHP 5.2.13崩溃。
PHP 5.2.13在第5行崩溃。
答案 0 :(得分:1)
解决。 notJim指出了register_globals php.ini设置。它被设置为On。按预期,转到关闭以分隔范围。注意:register_globals在PHP 5.3之前已经被弃用(至少可以说是这样) - 可能会更进一步。
答案 1 :(得分:1)
是的,这绝对是一个错误。我将foreach语句中的变量名更改为与会话变量不同的名称,以使两者都正常工作。在php 5.3.0版本中不会出现此问题。
答案 2 :(得分:0)
我使用5.2.6并且打招呼,没有错误。