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


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

你好,我使用的是一个旧脚本,在尝试访问脚本运行的站点。

Fatal error: Call-time pass-by-reference has been removed in /home/image/public_html/*****/admin/inc/html.inc.php on line 86

这是从第83行到第89行的Php代码我正在运行Php版本5.5.20

if ($flag) {
    $out  = '';
    $find = '{CONSTVAR:$';
    html_replacevar(&$html, $find, $page);
    if (strpos($html, '{') === FALSE) {
        $out = $html;
    }

任何了解php的人都能告诉我可能有什么问题,以及如何解决它吗?我是php和编码的新手,所以这就是我需要帮助的原因。非常感谢。

问题是通过引用传递变量。正如错误所说。尝试修改函数html_replacevar,使其返回修改后的html并像这样使用:

$html = html_replacevar($html, $find, $page);

这是关于理解引用的。作为引用的函数参数传递该实际变量,因此在函数内部对其进行的修改将在函数外部持续存在。默认情况下,传递给函数的变量是副本,因此在函数内部更改变量在函数外部没有效果。此规则的例外是作为对象的参数,因此对它们的更改(而不是变量的重新分配)始终保持不变。

引用是以&开头的变量。您过去可以在呼叫时选择是否使用引用,您可以执行以下操作之一:

$foo = bar($baz);
$foo = bar(&$baz);

只有第二个意味着bar()可以返回值并且对原始$baz进行更改。现在,为了使语言更清晰、更高效,您只能设置哪些参数是函数/方法签名中的引用,例如:

function bar(&$qux) {
    …
}

现在,每个人都知道函数打算修改它的第一个参数,并且您永远不会在调用中向引用的参数添加&

PHP不再允许函数调用的传递引用,但它在函数定义中允许这样做。

尝试更换

html_replacevar(&$html, $find, $page);

带有

html_replacevar($html, $find, $page);