Codeigniter PHP7 错误

7

我有一个基于Codeigniter 2的网站,当我将服务器版本切换到PHP7时,出现了以下两个错误:

遇到了PHP错误 严重级别: 注意 消息: 只能通过引用分配变量 文件名: core/Controller.php 行号: 51

$this->load->_base_classes =& is_loaded();

遇到了 PHP 错误 严重性: 8192 消息: 在未来的 PHP 版本中,与其类名相同的方法将不再是构造函数; CI_DB_driver 具有已弃用的构造函数 文件名: database/DB_driver.php 行数: 31

有人知道如何修复它们吗?


只需将那一行更改为 $this->load->_base_classes = is_loaded();,就可以正常工作了 :) - sdx11
2个回答

13

最终我只是更新了CI核心到CodeIgniter 2.2.6版本。不得不更改DB驱动程序为mysqli(因为mysql在PHP7中已不再支持),并重新在数据库中添加了ci_sessions表(不知道为什么)。现在运行得非常好!


我正在使用PHP 7,刚刚将我的数据库驱动程序从mysql更新为mysqli,并且它已经可以正常工作了。 - Qazi
考虑升级到CI3,因为2.2已经在几年前达到了生命周期的终点。有关详细信息,请参见其他问题的答案:https://dev59.com/KJ3ha4cB1Zd3GeqPQS-q - Roland

2

只有变量应该通过引用赋值

这个错误不仅限于PHP 7,在旧版本中也会出现。无论如何,我认为问题在于 is_loaded() 没有正确地返回引用。它是否通过引用返回(像 function &is_loaded() 一样)?如果不是,则需要这样做。它返回一个变量还是表达式?如果不是变量,则需要将其放入变量中,然后才能返回对其的引用。

PHP手册页面:http://php.net/manual/en/language.references.return.php

与其类名相同的方法将不会成为未来版本PHP的构造函数;CI_DB_driver具有已弃用的构造函数

在PHP 4中,您可以通过将构造函数命名为与类相同的方式来创建构造函数方法。因此,如果您的类是 class FooBar,则构造函数将是 public function FooBar。但在PHP 5及更高版本中,建议的构造函数名称是 __construct。因此,请编辑该类并将其构造函数重命名以消除弃用错误。确保查看任何扩展类以查看它们是否调用了该构造函数方法,以便您可以更改它们。

请参阅升级指南:http://php.net/manual/en/migration70.deprecated.php

还请参阅RFC:https://wiki.php.net/rfc/remove_php4_constructors


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接