10

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

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

是什么导致了错误以及如何修复它?我不是开发者,所以请慢慢来。

4

3 回答 3

23

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

只需删除& on (&$image

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

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

于 2013-12-16T09:09:05.853 回答
11

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

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

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

于 2013-11-06T05:14:27.630 回答
0

进入Joomla根目录,执行:

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

这对我有用。

于 2017-09-18T07:02:55.090 回答