我有一台装有 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 的配置)以包含新路径。