从 Ubuntu 16.04 升级到 18.04 后 phpMyAdmin 无法运行

从 Ubuntu 16.04 升级到 18.04 后 phpMyAdmin 无法运行

我有一台装有 MySQL、Apache2 和 phpMyAdmin 的 Ubuntu 服务器。今天我从 Ubuntu 16.04 升级到了 18.04。现在我遇到了一个问题,phpMyAdmin 只显示一个空白的网页,没有任何内容。

我在 apache 错误日志中发现了这些条目(客户端和引用者由我编辑):

[Mon Aug 27 20:10:00.558433 2018] [php7:warn] [pid 17925] [client <ip:port>] PHP Warning:  is_dir(): open_basedir restriction in effect. File(/usr/share/php/php-php-gettext/) is not within the allowed path(s): (/usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/) in /usr/share/phpmyadmin/libraries/vendor_config.php on line 64, referer: <url>
[Mon Aug 27 20:10:00.560176 2018] [php7:warn] [pid 17925] [client <ip:port>] PHP Warning:  require_once(): open_basedir restriction in effect. File(/usr/share/php/php-php-gettext/gettext.inc) is not within the allowed path(s): (/usr/share/phpmyadmin/:/etc/phpmyadmin/:/var/lib/phpmyadmin/:/usr/share/php/php-gettext/:/usr/share/javascript/:/usr/share/php/tcpdf/:/usr/share/doc/phpmyadmin/:/usr/share/php/phpseclib/) in /usr/share/phpmyadmin/libraries/common.inc.php on line 77, referer: <url>
[Mon Aug 27 20:10:00.561106 2018] [php7:warn] [pid 17925] [client <ip:port>] PHP Warning:  require_once(/usr/share/php/php-php-gettext/gettext.inc): failed to open stream: Operation not permitted in /usr/share/phpmyadmin/libraries/common.inc.php on line 77, referer: <url>
[Mon Aug 27 20:10:00.561554 2018] [php7:error] [pid 17925] [client <ip:port>] PHP Fatal error:  require_once(): Failed opening required '/usr/share/php/php-gettext/gettext.inc' (include_path='.') in /usr/share/phpmyadmin/libraries/common.inc.php on line 77, referer: <url>

这些日志行引用这些资源:

  • /usr/share/phpmyadmin/libraries/vendor_config.php on line 64
  • /usr/share/phpmyadmin/libraries/common.inc.php on line 77

但这些文件我从来没有手动更改过。所以我现在不敢更改它们。

这是 vendor_config.php,第 60 行至 68 行(第 64 行以“if”开头):

/**
 * Path to gettext.inc file. Useful when you want php-gettext somewhere else,
 * eg. /usr/share/php/gettext/gettext.inc.
 */
if (is_dir('/usr/share/php/php-php-gettext/')) {
    define('GETTEXT_INC', '/usr/share/php/php-php-gettext/gettext.inc');
} else {
    define('GETTEXT_INC', '/usr/share/php/php-gettext/gettext.inc');
}

两个目录,

  • /usr/share/php/php-gettext/
  • /usr/share/php/php-php-gettext/

确实存在。其所有者是 root:root,权限为:755

php-gettext 包含 3 个符号链接,指向 php-php-gettext 中的 3 个文件(链接和目标同名),分别是:

  • 获取文本
  • 获取文本.php
  • 流.php

所有文件都属于root:root。符号链接的权限:777。php-php-gettext中文件的权限为:644。


这是 common.inc.php,第 74 行至 77 行:

/**
 * Load gettext functions.
 */
require_once GETTEXT_INC;

这里有什么问题?

更重要的是:我必须做什么才能纠正它?

答案1

看起来您的 PHP gettext 目录的位置随着升级而发生了变化,并且您正在使用open_basedir它来限制从哪些目录加载 PHP 文件。

要解决该问题,请更新您的open_basedir设置php.ini(或可能是 Apache 的配置)以包含新路径。

相关内容