![](/img/trans.png)
[英]500 Internal Server Error and blank page after migrating PHP project from 5.6 to 7.3
[英]Updated server from php 5.6 to 7.3, getting PEAR error
我最近将我的服务器 php 版本从 5.6 更新到了 7.3。 当我尝试加载页面时,我看到以下解析错误:
解析错误:语法错误,第 940 行 /usr/share/pear/MDB2/Driver/mysqli.php 中的意外“新”(T_NEW)
上面的文件是通过pear自动安装的,这里是提示错误的部分:
938
939 $class_name = 'MDB2_Statement_'.$this->phptype;
940 $obj =& new $class_name($this, $statement, $positions, $query, $types, $result_types, $is_manip, $limit, $ offset);
941 $this->debug($query, __FUNCTION__, array('is_manip' => $is_manip, 'when' => 'post', 'result' => $obj));
942 return $obj;
943 }
944
我已经使用 pear upgrade-all 更新了所有 pear 包,重新启动了 httpd 并继续收到上述相同的错误。
您的问题在于$obj =& new...
中的=&
,它应该只是=
。 对象不能、不应该、也不需要通过引用来创建。 这样的表达式在 PHP 5 中被弃用,并在 PHP 7 中无效(参见不同 PHP 版本的eval
响应)。
为什么 PEAR package 应该有这个对我来说是个谜,它一定是很久以前的遗迹。 它没有比$x =& [];
更有意义 (这也会导致错误)。 将 object 分配给变量时,该变量将成为指向 object 的指针。 所以:
$a = new stdClass();
var_dump($a);
// object(stdClass)#1 (0) {}
$b = $a;
var_dump($b);
// object(stdClass)#1 (0) {}
var_dump($a === $b);
// bool(true)
也就是说:即使没有分配$b =& $a
,默认情况下,两个变量都指向同一个 object (即object(stdClass)#1
)。 清理它们并给 PEAR package 维护者留言。 仅供参考, MDB2_Driver_mysqli package 最后一次更新是在 2012 年 10 月 23 日,所以获取最新的更新不会有太大帮助。 寻找最新的替代品。 (Core PHP has had mysqli
built in since PHP 5 and also has PDO if you need code portability between different RDBMs).
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.