【问题标题】:PHP 7 with phpmyadmin gives lots of Deprecation Notices带有 phpmyadmin 的 PHP 7 提供了大量的弃用通知
【发布时间】:2016-08-28 09:38:47
【问题描述】:

我有 Ubuntu 16.04 LTS 运行并安装了 PHP7 和 phpmyadmin。 但是,我收到了很多弃用通知,例如:

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)

这是个问题吗?我怎样才能摆脱这些通知(每次加载页面或执行操作时都会弹出)?

【问题讨论】:

  • 这发生在标准的、全新安装的 16.04 和 phpmyadmin 的存储库版本上。 @David Curry 对重新安装的回答很简单而且很有效,这里的其他方法并不能简单地解决问题。

标签: phpmyadmin php-7 ubuntu-16.04


【解决方案1】:

我遇到了这个问题,并通过简单地重新安装 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

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

【讨论】:

  • 为我工作。注意:我在有关删除/替换 db 通用数据库配置的安装提示中选择了“否”,以保留现有的配置设置。无需其他设置。
  • 这最初对我有用。但是,大约两周后,弃用通知开始出现。
  • 虽然被接受,但这个答案对我不起作用。提供给this answer 的链接(最初由user123943 提供)确认这确实是由php-gettext 中的错误 引起的,并且弃用通知只是在通知您这。在 php-gettext 更新为使用与 PHP 7.0 兼容的类构造函数之前,重新安装将无法正常工作。
  • + sudo services apache2 restart ;)
  • services?只需 service : sudo service apache2 restartsudo systemctl restart apache2.service 即可刷新 apache 服务器。
【解决方案2】:

我解决此问题的方法是按照depreciation notice error in phpmyadmin with 16.04 的 askubuntu 说明进行操作。它涉及更改 /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='') {

function __construct($str='') {

第 84 行 FileReader 错误

转到第 90 行并更改

function FileReader($filename) {

function __construct($filename) {

第 145 行 CacheFileReader 错误

转到第 146 行并更改

function CachedFileReader($filename) {

function __construct($filename) {

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

第 36 行 gettext_reader { 错误

我想你现在明白了,转到第 101 行并更改

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

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

【讨论】:

  • 确实如此。赞成。 php-gettext 文件的时间戳从 2010 年 12 月 25 日开始 - 将它们的 'class XYZ{ function XYZ(){} }' 更改为 'class XYZ{ function __construct(){} }' 样式的代码应该可以解决问题和任何更新无论如何,包都应该包含该修复程序,因此您应该不会因为更新而使您的修复程序失效,但保留备份只是一种很好的方式 - 总是!
  • 像魅力一样工作,然后是sudo service nginx restart。 Apache 用户将 nginx 替换为 apache2
  • 手动更改包中的代码?这闻起来像可怕的黑客攻击。
  • @alexw true,但这只是对我的管理员 php 的依赖,它使用旧的构造函数(我非常喜欢,不知道为什么 php7 想要弃用它),所以它不是真正的重大变化。
【解决方案3】:

您可以为 phpmyadmin 使用另一个 PPA。这里是 PPA Link

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

由于它只是一个临时解决方案或不是最佳解决方案,直到重建 ubuntu repos 中的 phpmyadmin 包。

【讨论】:

  • 完成此操作后,我们如何确保这个“临时解决方案”不会成为永久性的?
  • 即我们应该在安装phpmyadmin 之后删除它吗?我们是否应该定期检查标准存储库并在它们可用时重新安装?
  • @ButtleButkus 是的,您的观点是正确的,删除​​此 PPA 并检查标准 repo 但就我得到的 Ubuntu 16.04 repo 仍然没有重建,所以最好保留到官方 repo已更新。
  • 那个 PPA 链接已经不存在了……有替换吗?
【解决方案4】:

您应该尝试在您的 php.ini 中设置 error_reporting = ~E_DEPRECATED,这将消除弃用错误。它应该类似于error_reporting = ~E_DEPRECATED & E_ALL。 请让我知道它是否有效。

【讨论】:

  • @beniaminp 有两种类型的弃用通知E_DEPRECATEDE_USER_DEPRECATED。在某些配置中,您可能需要同时禁用两者以停止 PHPMyadmin 中的警告。
  • 抑制警告是解决方案还是变通方法?在出于某种目的添加了所有警告之后。对吗?
  • @BTRNaidu 出现警告是因为您使用的 phpMyAdmin 版本中的代码在 PHP 7 中已弃用。因此,在您升级到已修复的更新版本的 phpMyAdmin 之前,这基本上是一种解决方法他们的代码兼容 PHP 7。请参阅其他答案。
  • 这是一种解决方法,但如果您在生产服务器上运行,您可能还是希望禁用弃用错误。
【解决方案5】:

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

sudo apt-get dist-upgrade

【讨论】:

  • 首先:sudo apt-get update 之后,sudo service apache2 restart
  • 感谢 Mathieu 提醒我。我忘了告诉你,最后你想重新启动 Apache 服务器以完全修复错误,因为你需要 sudo service apache2 restart 让我知道如果你很难解决这个问题错误。
  • 然而:sudo apt-get dist-upgrade 及其更新的变体sudo apt-get full-upgrade 并不适合所有人。这些命令很危险,可能会破坏您的系统(它确实发生在我身上)。只值我的两美分。
  • 我正在尝试这样做,但每次会话过期并且必须再次登录时,问题都会再次出现。仅从 nijel repo (ppa:nijel/phpmyadmin) 安装 phpmyadmin 为我修复了它。
  • 不用说你需要通过systemctl restart apache2重启apache。这应该是公认的答案。
【解决方案6】:

适用于 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';

【讨论】:

    【解决方案7】:

    您没有提及您正在使用哪个版本的 phpMyAdmin 或它的安装位置,但它似乎是 Ubuntu 打包版本 4.5.4.1 或源代码中相当旧且不受支持的版本。无论哪种方式,我相信您的问题已在https://github.com/phpmyadmin/phpmyadmin/issues/11462 报告(并已修复)——如果您使用的是 Ubuntu 打包版本,那里的 cmets 建议 nijel PPA 版本应该更适合您。

    当然,Beniamin Pantiru 接受的答案也很好,如果您正在运行生产服务器,则作为标准最佳实践,无论如何都应该减少 PHP 显示的警告和错误的数量。

    【讨论】:

      【解决方案8】:

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

       sudo service apache2 restart
      

      【讨论】:

        【解决方案9】:

        我已通过在 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 谢谢:-)
        【解决方案10】:

        问题是由过时的 PHP 类构造函数语法引起的。要解决此问题,请在终端上运行以下代码:

        sed -ri.bak 's:function StringReader.*:function __construct($str=\x27\x27) {:' /usr/share/php/php-gettext/streams.php
        sed -ri 's:function FileReader.*:function __construct($filename) {:' /usr/share/php/php-gettext/streams.php
        sed -ri 's:function CachedFileReader.*:function __construct($filename) {:' /usr/share/php/php-gettext/streams.php
        sed -ri.bak 's:function gettext_reader.*:function __construct($Reader, $enable_cache = true) {:' /usr/share/php/php-gettext/gettext.php
        

        【讨论】:

          【解决方案11】:

          使用 sudo apt-get dist-upgrade 更新服务器对我有用,然后重新启动 apache。

          我认为这个问题是由于没有足够频繁地更新 phpmyadmin 造成的。

          【讨论】:

            【解决方案12】:

            直到它在依赖项本身中得到解决(在您的情况下是 php-gettext)并且您不想更改全局 PHP 设置以便您的其他内容不受影响,您可能想尝试自定义 PHPMyadmin 的 index.php通过放

            error_reporting( ~E_DEPRECATED & E_ALL );
            

            在开头的某处或通过使用

            php_value error_reporting 24575
            

            在 .htdocs 或虚拟主机配置指令中。我认为后一种选择更好。

            【讨论】:

              【解决方案13】:

              我不想弄乱 php 安装,因此我刚刚重新启动了我的 Apache,它对我来说非常有效。

              "sudo service apache2 restart"
              

              【讨论】:

                【解决方案14】:

                我以不同的方式解决了这个问题,因为我从较新的 Ubuntu 下载了官方软件包:

                https://packages.ubuntu.com/search?keywords=phpmyadmin
                

                然后安装它:

                sudo dpkg -i phpmyadmin_4.6.6-5_all.deb
                

                因此不必使用非官方存储库,并且该软件包将在以后简单地更新。

                【讨论】:

                  【解决方案15】:

                  当您之前运行的原始 PHP 版本与当前 PHP 服务器版本不匹配时,就会出现问题。根据您安装的 PHP 版本,这应该足够了。

                  sudo apt-get update
                  sudo apt-get install phpmyadmin php7.0-gettext php7.0-mbstring -y
                  

                  【讨论】:

                    【解决方案16】:

                    phpMyAdmin登录页面上的“弃用通知”消息

                    好的,这个问题很容易通过编辑/etc/php/7.0/apache2/php.ini解决

                    error_reporting 值更改为:

                    error_reporting = ~E_DEPRECATED & E_ALL.   
                    

                    默认情况下它在评论位置,所以取消评论并更改它。

                    然后重启Apache

                    systemctl restart apache2
                    

                    或第二个解决方案

                    apt-get purge phpmyadmin
                    apt-get install phpmyadmin
                    

                    如果需要,则安装

                    apt-get install php7.0-mbstring
                    

                    然后重启Apache

                    systemctl restart apache2
                    

                    嗯,“弃用通知”消息不再显示。

                    【讨论】:

                      【解决方案17】:

                      我遇到了同样的问题,这里提出的解决方案都不起作用。

                      我的配置是 Ubuntu 16.04 和 php 7。

                      我解决了将 phpmyadmin 重新安装到最新版本 (5.02) 的问题。这个过程非常简单。通过重命名备份你的phpmyadmin文件夹('/usr/share/phpmyadmin/'到'/usr/share/phpmyadmin.bak/'),创建另一个文件夹'/usr/share/phpmyadmin/',下载最新版本的phpmyadmin并在新创建的文件夹“/usr/share/phpmyadmin/”中复制文件。您的版本现已升级。就我而言,弃用通知消失了。

                      该过程可能会引发一对其他错误,您可以按照本指南 https://devanswers.co/manually-upgrade-phpmyadmin/ 摆脱这些错误

                      【讨论】:

                        【解决方案18】:

                        最重要的答案还有一件事;需要添加

                        Include /etc/phpmyadmin/apache.conf
                        

                        /etc/apache2/apache2.conf
                        

                        然后重启 Apache:

                        /etc/init.d/apache2 restart
                        

                        【讨论】:

                        • 为什么要加这个?
                        • 这个问题并没有具体说明使用 Apache。
                        【解决方案19】:

                        最后我永久地解决了这个问题。

                        在您的服务器中找到您的 php.ini 文件。它应该在 /etc/php/7.0/apache2 文件夹中

                        用 nano 打开它

                        nano /etc/php/7.0/apache2/php.ini
                        

                        在 php.ini 文件中查找 (ctrl+w) upload_max_filesize = 2M(默认)

                        根据需要将默认值更改为 50M 或 100M 或 20M。

                        保存并重启apache2服务

                        service apache2 restart
                        

                        请告诉我你的满意:-)

                        【讨论】:

                        • 这个“修复”似乎与问题无关。
                        • 唯一与问题相关的是 sudo service apache2 restart,你错过了 sudo 部分。
                        • 这个问题并没有具体说明使用 Apache。
                        【解决方案20】:

                        重启服务器对我有帮助

                        shutdown -r now
                        

                        【讨论】:

                        • 这个“修复”似乎与问题无关。
                        猜你喜欢
                        • 2020-06-16
                        • 2022-07-09
                        • 1970-01-01
                        • 1970-01-01
                        • 2014-05-25
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2021-04-21
                        相关资源
                        最近更新 更多