gpt4 book ai didi

当 foreach() 虚拟名称与数组名称匹配时,PHP $_SESSION 嵌套数组丢失

转载 作者:搜寻专家 更新时间:2023-10-31 21:18:34 24 4
gpt4 key购买 nike

有人可以确认以下是 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 次前清除 session 变量。

同样,将“$breadcrumb”更改为“$the_breadcrumb”可以解决问题。但是 foreach() 循环应该没有副作用。注意:由于 $breadcrumb 的范围与 $_SESSION["breadcrumb"] 的范围不同,因此应该不会发生冲突。

请注意,在数组上执行 print_r() 显示数组第一次(正确)为空,第二次(正确)填充,第三次错误地设置为“Array ( [breadcrumb] => trail )”时间(嵌套数组已被清除)。

第三次运行时 PHP 错误日志中的错误:PHP fatal error :无法在第 5 行将字符串偏移量用作数组

这个问题不是 PHP 5.3 的问题 - 只有 PHP 5.2.13。我在 PHP 站点 (php.net) 的 PHP 更新日志中找不到关于此问题的任何注释,而且我必须在我的实时站点上使用 5.2.13,所以我在这里发帖希望有人可以确认。我还在 php.net 上发布了错误报告。

谢谢,丹·尼森鲍姆

预期结果:

第 5 行没有 PHP 5.2.13 崩溃。

实际结果:

PHP 5.2.13 在第 5 行崩溃。

最佳答案

已解决。 notJim 指出了 register_globals php.ini 设置。它被设置为开。如预期的那样,关闭以分离范围。注意:register_globals 从(至少早于)PHP 5.3 开始被弃用——可能更早。

关于当 foreach() 虚拟名称与数组名称匹配时,PHP $_SESSION 嵌套数组丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com