array_walk params userdata modified

时间:2012-08-01 16:34:54

标签: php segmentation-fault

我在申请中发现了一些奇怪的东西。

很难描述我的概率因为我无法与您分享可再生的样本。

主要问题是关于array_walk函数的第三个参数。

$row = array("user_id" => 1, "first_name" => "bobby");
$data = array("user_id" => "fc_name", "first_name" => "fc2_name", "email" => "fc3_name");
$res = array_walk( $row, 'fu', $aParams);

function fu(&$cell, $key, $data) {
    return call_user_func_array($data[$cell], array($cell, $key, $data));
}

当我运行脚本时,它被中止而没有错误。 调试后,我发现$ data被修改并成为一个递归数组。

Array
 *RECURSION*

我无法理解的是,在通过副本传递时,如何修改$ data? 我知道你没有关于执行的所有信息,并且call_user_func_array还有很多其他的调用。

由于

PS:我用Xdebug记录所有痕迹,但我找不到奇怪的东西。


UPDATE1 :如果我在foreach循环中翻译array_walk没问题

UPDATE2 :Update1让我明白问题不是纯PHP代码,为​​什么我在寻找“堆栈溢出”(真正的一个:))或段错误。我在官方的php bug报告https://bugs.php.net/bug.php?id=61730上发现了这个bug,我的php版本没有修复(5.3.2)我检查了我的array.c。该场景接近我的情况,所以我会在可以的时候更新php(企业流程......)。

我期待很多修复。

1 个答案:

答案 0 :(得分:0)

在PHP 5.3.10上修复的PHP bug https://bugs.php.net/bug.php?id=61730 刚刚更新了php