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


PHP Fatal error: Call-time pass-by-reference has been removed

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

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]);
    }
}

导致错误的原因是什么以及如何修复它?我不是开发人员,所以请慢慢来。

看起来您的网站 php 已升级,或者您正在重用 php 5.3 <的代码>

只需删除 & on (&$image

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

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

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

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

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

进入 Joomla 根目录并执行:

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

这对我有用。