php7.2 在 Ubuntu 16 上升级后出现 phpMyAdmin 错误(计数、河豚等)

phpMyAdmin errors (count, blowfish, etc.) after php7.2 upgrade on Ubuntu 16

php7.2 升级后出现 phpMyAdmin 错误

在 Ubuntu 16.04 LTS 上升级到 php7.2 后,phpMyAdmin 在我查看表时显示烦人的弹出警告:

"Some errors have been detected on the server! Please look at the bottom of this window. Ignore All. Ignore."

底部window:

"Warning in ./libraries/sql.lib.php#601

count(): Parameter must be an array or an object that implements Countable"

...后跟一长串回溯列表。

此问题出现在各种 phpMyAdmin 4.x 版本上,包括 4.5.4 及以下版本。

我该如何解决这个问题?


更新 - Blowfish 错误

升级到最新版本的 phpMyAdmin (4.7.9) 后,我现在收到一个新错误,它显示在每个页面的底部:

"The configuration file now needs a secret passphrase (blowfish_secret)."

我该如何解决这个问题?

在 Ubuntu

上手动更新 phpMyAdmin

在撰写本文时,Ubuntu package manager (4.5.4) 中可用的 phpMyAdmin 版本不完全支持 php7.2,这导致了烦人的计数( ) 警告。 解决方案是更新到最新的 phpMyAdmin 版本,在撰写本文时为 4.7.9。

Ubuntu包在后面。有一个phpMyAdmin PPA,但它也在后面:

“Note: This repository is currently a bit behind as I struggle to find time to update it to 4.7 series.”

幸运的是,我们可以从旧版本手动升级。

基本步骤是:

  1. 制作当前安装的备份副本
  2. 下载并解压最新版本的 phpMyAdmin
  3. 修改vendor_config.php文件到Ubuntu
  4. 的合适目录
  5. 添加更长的随机字符串以解决河豚错误消息并允许正确的 cookie 身份验证

这些终端命令应该可以完成工作(如果适用,请使用 sudo):

mv /usr/share/phpmyadmin /usr/share/phpmyadmin_old
mkdir /usr/share/phpmyadmin
mkdir /var/downloads
cd /var/downloads
wget https://files.phpmyadmin.net/phpMyAdmin/4.7.9/phpMyAdmin-4.7.9-all-languages.tar.gz
tar -xf phpMyAdmin-4.7.9-all-languages.tar.gz -C /usr/share/phpmyadmin --strip-components=1

(可选) 用最新版本或您选择的首选格式替换 wget 行。访问 https://www.phpmyadmin.net/downloads/.


解决河豚错误信息

此时,你在使用phpMyAdmin时很可能会出现河豚错误。要解决此问题,您应该更新特定的配置文件:

  1. /usr/share/phpmyadmin/libraries/vendor_config.php
  2. 中打开 vendor_config.php
  3. 在第 38 行或附近,将 define('CONFIG_DIR', ''); 替换为 define('CONFIG_DIR', '/etc/phpmyadmin/'); 并保存文件。

完成后,vendor_config.php 的第 33-38 行应该类似于:

/**
 * Directory where configuration files are stored.
 * It is not used directly in code, just a convenient
 * define used further in this file.
 */
define('CONFIG_DIR', '/etc/phpmyadmin/');

此时,phpMyAdmin 可能会正常工作,但您可能需要向 blowfish_secret 配置字符串添加额外的长度.

  1. 打开文件 /var/lib/phpmyadmin/blowfish_secret.inc.php

你应该看到:

<?php
$cfg['blowfish_secret'] = 'Something Short';
  1. $cfg['blowfish_secret']字符串添加额外的随机性,至少40个字符甚至更长可能更好(我使用的字符串只要100个字符)。

例如(不要用这个,只是一个例子):

$cfg['blowfish_secret'] = 'A much longer random string 7NfSjYezwmwGCfGDuDO7uWn4ESw2sCFCym1RatPjGCfGCym1RatPjGCfG';
  1. 保存文件。

此时,刷新 phpMyAdmin(在您的浏览器中)并再次登录。现在一切都应该正常工作了。

如果需要,您可以删除旧版 phpMyAdmin 的备份副本:

rm -rfv /usr/share/phpmyadmin_old

附加文档

供参考,以下摘自official phpMyAdmin documentation关于手动更新到最新版本(这是Ubuntu具体):

Warning

Never extract the new version over an existing installation of phpMyAdmin, always first remove the old files keeping just the configuration.

This way you will not leave old no longer working code in the directory, which can have severe security implications or can cause various breakages.

并且:

The complete upgrade can be performed in few simple steps:

  1. Download the latest phpMyAdmin version from https://www.phpmyadmin.net/downloads/.

  2. Rename existing phpMyAdmin folder (for example to phpmyadmin-old).

  3. Unpack freshly donwloaded phpMyAdmin to desired location (for example phpmyadmin).

  4. Copy config.inc.php` from old location (phpmyadmin-old) to new one (phpmyadmin).

  5. Test that everything works properly.

  6. Remove backup of previous version (phpmyadmin-old).

您修复错误的另一个选择是暂时将 php 降级到版本 7.1,直到 ubuntu 赶上它的 phpmyadmin 版本。说明here。我发现这更容易,而且无论如何都没有理由处于 php 的前沿。