PHP 7与phpmyadmin一起使用会产生大量的过时警告消息。

72

我正在使用安装有PHP7和phpmyadmin的Ubuntu 16.04 LTS操作系统。 然而,我遇到了很多类似于以下的弃用通知:

Deprecation Notice in ./../php/php-gettext/streams.php#48  
Methods with the same name as their class will not be constructors in a future version of PHP; StringReader has a deprecated constructor

Backtrace  
./../php/php-gettext/gettext.inc#41: require()  
./libraries/select_lang.lib.php#477: require_once(./../php/php-gettext/gettext.inc)  
./libraries/common.inc.php#569: require(./libraries/select_lang.lib.php)  
./index.php#12: require_once(./libraries/common.inc.php)

这是个问题吗?我该如何消除这些提示(它们会在每次加载页面或执行操作时弹出)?


2
这种情况发生在标准的、全新安装的16.04版本,并且使用phpmyadmin的软件仓库版本。@David Curry的重新安装方法很简单并有效,在这里其他方法不能解决问题。 - Henry's Cat
20个回答

113

我曾遇到过这个问题,并通过重新安装phpmyadmin及其依赖项来解决它。运行以下命令:

sudo apt-get remove --purge phpmyadmin php-gettext php-mbstring -y
sudo apt-get autoremove -y
sudo apt-get update
sudo apt-get install phpmyadmin php-gettext php-mbstring -y

重新安装后,你的设备应该和新的一样好用!


7
对我有效。注意:在安装提示中,我选择了“否”以保留现有的配置设置,不删除/替换数据库公共数据库配置。无需进行其他设置。 - jwinn
16
一开始这对我有效。然而,大约两周后,废弃通知开始再次出现。 - electrophile
14
虽然这个回答被认可,但对我没有用。提供给 这个答案 的链接(最初由 user123943 提供)证实了这确实是由 php-gettext 中的一个错误引起的,并且 Deprecation Notices 只是在通知您这一点。在 php-gettext 更新为与 PHP 7.0 兼容的类构造函数之前,重新安装是行不通的。 - Free Radical
10
  • sudo services apache2 restart ;)
请执行以上命令来重启Apache服务器。
- Jean Paul CP
3
"services"? 只需使用 service : sudo service apache2 restartsudo systemctl restart apache2.service 来刷新 Apache 服务器。 (注:这是将英文命令翻译为中文的结果,没有解释和其他内容) - B. Shea
显示剩余5条评论

81
我解决这个问题的方式是按照askubuntu上的指示进行操作,网址为depreciation notice error in phpmyadmin with 16.04。它需要在/usr/share/php/php-gettext/streams.php中更改三行,在/usr/share/php/php-gettext/gettext.php中更改一行。
从该链接中,如果您使用的是Ubuntu 16.04,则需要进行以下更改:
sudo nano /usr/share/php/php-gettext/streams.php

第48行StringReader错误。

转到第52行并更改

function StringReader ($str='') {

TO

function __construct($str='') {

第 84 行 FileReader 错误

前往第 90 行并更改

function FileReader($filename) {
to
function __construct($filename) {

第145行 CacheFileReader 错误

前往第146行并进行更改

function CachedFileReader($filename) {
to
function __construct($filename) {

使用 sudo nano /usr/share/php/php-gettext/gettext.php

第36行 gettext_reader { error

现在您应该明白了,转到第101行并更改

function gettext_reader($Reader, $enable_cache = true) {

function __construct($Reader, $enable_cache = true) {

1
确实。已点赞。php-gettext文件的时间戳为2010-12-25 - 将它们的“class XYZ{ function XYZ(){} }”更改为“class XYZ{ function __construct(){} }”样式的代码应该可以解决问题,而且包的任何更新都应该包含该修复程序,因此您的修复程序不会被更新所否定,但保留备份只是一个好习惯 - 总是这样! - flowtron
3
像魔法一样顺利地完成,接着输入 sudo service nginx restart。如果你使用的是 Apache,将 nginx 替换为 _apache2_。 - Saif
6
手动更改软件包中的代码?这听起来像是一个可怕的破解。 - alexw
@alexw 是的,但这只是为了php my admin的依赖项,它使用旧的构造函数(我个人更喜欢,不知道为什么php7想要弃用它),所以这并不是一个重大的改变。 - Henrik Bøgelund Lavstsen

39

你可以使用另一个PPA来安装phpmyadmin。这是PPA链接

sudo add-apt-repository ppa:nijel/phpmyadmin
sudo apt update
sudo apt install phpmyadmin

由于这只是一个临时解决方案,或者不是最佳解决方案,在Ubuntu软件库中的phpmyadmin软件包被重建之前。


1
完成这个任务后,我们该怎么做才能确保这个“临时解决方案”不会变成永久性的呢? - Buttle Butkus
1
安装phpmyadmin后,我们应该删除仓库吗?我们应该定期检查标准仓库,并在它们提供时重新安装吗? - Buttle Butkus
@ButtleButkus 是的,你说得对,应该删除这个 PPA 并检查标准仓库,但据我所知,Ubuntu 16.04 仓库仍未重建,所以最好是在官方仓库更新之前保留它。 - Deepanshu Jain
那个 PPA 链接已经不存在了...有替代链接吗? - user2662680

23

您可以轻松地从设置中完成此操作 访问功能表单

http://<localhost>/phpmyadmin/prefs_forms.php?form=Features

选择从不发送错误报告

选择从不发送错误报告


21

您应该尝试在php.ini中设置error_reporting = ~E_DEPRECATED,这将删除弃用错误。它应该类似于error_reporting = ~E_DEPRECATED & E_ALL。如果可行,请告诉我。


3
有两种弃用通知类型,分别是E_DEPRECATEDE_USER_DEPRECATED。在某些配置中,您可能需要同时禁用这两种类型的通知,以停止PHPMyadmin中的警告。 - Dom
7
压制警告是解决方案还是变通方法?毕竟所有这些警告都是出于某种目的而添加的,对吧? - BTR Naidu
@BTRNaidu,警告出现是因为您使用的phpMyAdmin版本中的代码在PHP 7中已被弃用。因此,这本质上是一个解决方法,直到您升级到新版本的phpMyAdmin,在那里他们已经修复了他们的代码以使其与PHP 7兼容。请参见其他答案。 - BadHorsie
这是一个折中的方法,但如果您正在生产服务器上运行,您可能希望禁用废弃错误。 - alexw

16

适用于 PHP 7.3+。

编辑以下文件:config.inc.php。它可以在/etc/phpmyadmin/config.inc.php/usr/share/phpmyadmin/config.inc.php中找到。

/**
 * Whether or not to query the user before sending the error report to
 * the phpMyAdmin team when a JavaScript error occurs
 *
 * Available options
 * ('ask' | 'always' | 'never')
 * default = 'ask'
 */

$cfg['SendErrorReports'] = 'never';

这是正确的做法吗? - Naren Verma

15
亲爱的@BeniaminPantiru,您的答案是正确的,但您的解决方案并没有解决问题,因为您告诉Apache不要显示弃用错误,而不是修复错误。但我们可以通过升级必要的安全更新和软件包来轻松解决此错误。键入以下命令即可解决问题。
sudo apt-get dist-upgrade

1
首先:sudo apt-get update 然后,sudo service apache2 restart - Mathieu G
感谢Mathieu提醒我。我忘了告诉你,最后你需要重新启动Apache服务器来完全修复错误,因此您需要sudo service apache2 restart。如果您在修复此错误时遇到困难,请告诉我。 - Mohamed Haseem
5
然而,“sudo apt-get dist-upgrade”及其更新的变体“sudo apt-get full-upgrade”,并非适用于所有人。这些命令存在风险,并可能使您的系统崩溃(我就遇到过这种情况)。这只是我的个人意见。 - Free Radical
我曾尝试过解决这个问题,但每次会话过期后都需要重新登录,问题又出现了。只有从nijel仓库(ppa:nijel/phpmyadmin)安装phpmyadmin才能为我解决这个问题。 - Alberto Alexander Rodriguez
毋庸置疑,您需要通过 systemctl restart apache2 重新启动 Apache。这应该是被接受的答案。 - mutiemule
我已经尝试过了,但对我没有用。 - Naren Verma

5

我曾经遇到过同样的问题。在清除phpmyadmin并重新安装之前,尝试重启Apache。在我的情况下,这是最简单的方法,我首先尝试了它。我只是想让人们节省时间。

 sudo service apache2 restart

4
你没有提到你使用的phpMyAdmin版本或安装来源,但看起来可能是Ubuntu打包版本4.5.4.1或来自源代码的旧版本。无论哪种方式,我认为你的问题已经在https://github.com/phpmyadmin/phpmyadmin/issues/11462上得到了报告(并解决)-- 如果你使用的是Ubuntu打包版本,则那里的评论建议你使用nijel PPA版本会更好。 当然,Beniamin Pantiru的被接受的答案也很好,如果你正在运行生产服务器,应该减少PHP显示的警告和错误数量,这是一个标准最佳实践。

3

我通过将错误报告设置为以下内容,在php.ini文件路径 /etc/php/7.0 中进行了修复。

error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR

常见值:

 E_ALL (Show all errors, warnings and notices including coding standards.)

 E_ALL & ~E_NOTICE  (Show all errors, except for notices)

 E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding standards warnings.)

 E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)

 Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

有所帮助。但在我的情况下,php.ini 位于 /etc/php/7.0/apache2/php.ini。谢谢 :-) - mukto90

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