PHP 致命错误:调用时传递引用已被删除

Posted

技术标签:

【中文标题】PHP 致命错误:调用时传递引用已被删除【英文标题】:PHP Fatal error: Call-time pass-by-reference has been removed 【发布时间】:2013-11-17 05:55:30 【问题描述】:

我有一个旧的脚本,最近我收到了这个错误:

Fatal error: Call-time pass-by-reference has been removed in /****/******/public_html/****/cp-list-summary.php on line 100

它在该文件的第 100 行左右看起来像这样:

if ($row[images])

    $image_set = array ();
    $result = mysql_query ('SELECT fname FROM ' . $dbimgs . ' WHERE listid=\'' . $_GET['id'] . '\' ORDER BY id ASC', $link);
    while ($images = mysql_fetch_array ($result))
    
        array_push (&$image_set, $images[fname]);
    

导致错误的原因以及如何解决?我不是开发者,所以请慢慢来。

【问题讨论】:

Call-time pass-by-reference has been removed 的可能重复项 【参考方案1】:

看起来您的站点 php 已升级,或者您正在重用 中的代码

只需删除 (&$image

上的 &

注意:函数调用没有参考符号 - 仅在函数定义上。仅函数定义就足以通过引用正确传递参数。从 PHP 5.3.0 开始,当您在 foo(&$a); 中使用 & 时,您将收到一条警告说“调用时传递引用”已被弃用。从 PHP 5.4.0 开始,调用时传递引用已被删除,因此使用它会引发致命错误。

不应通过引用传递其他表达式,因为结果未定义。

【讨论】:

【参考方案2】:

您正在尝试将指针传递给array_push 中的数组。这就是遇到致命错误的原因。只需使用:

array_push( $image_set, $images[fname] );

注意:如果第一个参数不是,array_push() 会发出警告 一个数组。

【讨论】:

【参考方案3】:

进入Joomla根目录并执行:

find ./ -type f -name "*.php" -exec sed -i 's/\&\$/\$/g'  +

这对我有用。

【讨论】:

以上是关于PHP 致命错误:调用时传递引用已被删除的主要内容,如果未能解决你的问题,请参考以下文章

PHP对象到底是值传递还是引用传递

引用传递错误

用ado对SQLSERVER数据库操作,删除一条记录后查询提示“句柄引用了一个已被删除的行或标示为删除的行”

为啥 PHP 在一种情况下允许将文字传递给按引用传递的参数,而在其他情况下不允许?

PHP 5.4 Call-time pass-by-reference - 在这里轻松修复?

调用递归函数时出现编译器错误 - “试图引用已删除的函数”