Phpmyadmin 5.1.0.RC1 & 5.0.4 错误(./libraries/classes/Config.php#1285 mkdir() 中的警告:权限被拒绝)

Posted

技术标签:

【中文标题】Phpmyadmin 5.1.0.RC1 & 5.0.4 错误(./libraries/classes/Config.php#1285 mkdir() 中的警告:权限被拒绝)【英文标题】:Phpmyadmin 5.1.0.RC1 & 5.0.4 error (Warning in ./libraries/classes/Config.php#1285 mkdir(): Permission denied) 【发布时间】:2021-04-14 21:00:13 【问题描述】:

我在 ubuntu 服务器 20.04 上测试 phpmyadmin 5.0.4 和 5.1.0.RC1,我收到以下错误:

Warning in ./libraries/classes/Config.php#1285
 mkdir(): Permission denied
Backtrace

./libraries/classes/Config.php#1285: mkdir(
string '/usr/share/phpmyadmin//var/lib/phpmyadmin/tmp/twig',
integer 504,
boolean true,
)
./libraries/classes/Template.php#57: PhpMyAdmin\Config->getTempDir(string 'twig')
./libraries/classes/Theme.php#101: PhpMyAdmin\Template->__construct()
./libraries/classes/Theme.php#174: PhpMyAdmin\Theme->__construct()
./libraries/classes/ThemeManager.php#307: PhpMyAdmin\Theme::load(
string './themes/pmahomme',
string '/usr/share/phpmyadmin/./themes/pmahomme/',
)
./libraries/classes/ThemeManager.php#79: PhpMyAdmin\ThemeManager->loadThemes()
./libraries/classes/ThemeManager.php#121: PhpMyAdmin\ThemeManager->__construct()
./libraries/classes/ThemeManager.php#385: PhpMyAdmin\ThemeManager::getInstance()
./libraries/common.inc.php#232: PhpMyAdmin\ThemeManager::initializeTheme()
./index.php#15: require_once(./libraries/common.inc.php)

我尝试通过 www-data 更改我的 ./libraries/classes/Config.php 和 /var/lib/phpmyadmin/tmp/twig 的所有者(也创建了这个文件夹“twig”) ),但错误未解决。

我的供应商配置是:

<?php
/**
 * File for vendor customization, you can change here paths or some behaviour,
 * which vendors such as Linux distributions might want to change.
 *
 * For changing this file you should know what you are doing. For this reason
 * options here are not part of normal configuration.
 */

declare(strict_types=1);

// phpcs:disable PSR1.Files.SideEffects
if (! defined('PHPMYADMIN')) 
    exit;

// phpcs:enable

/**
 * Path to vendor autoload file. Useful when you want to
 * have have vendor dependencies somewhere else.
 */
define('AUTOLOAD_FILE', ROOT_PATH . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php');

/**
 * Directory where cache files are stored.
 */
define('TEMP_DIR', ROOT_PATH . '/var/lib/phpmyadmin/tmp/' . DIRECTORY_SEPARATOR);

/**
 * Path to changelog file, can be gzip compressed. Useful when you want to
 * have documentation somewhere else, eg. /usr/share/doc.
 */
define('CHANGELOG_FILE', ROOT_PATH . 'ChangeLog');

/**
 * Path to license file. Useful when you want to have documentation somewhere
 * else, eg. /usr/share/doc.
 */
define('LICENSE_FILE', ROOT_PATH . 'LICENSE');

/**
 * Directory where SQL scripts to create/upgrade configuration storage reside.
 */
define('SQL_DIR', ROOT_PATH . 'sql' . DIRECTORY_SEPARATOR);

/**
 * 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/');

/**
 * Filename of a configuration file.
 */
define('CONFIG_FILE', CONFIG_DIR . 'config.inc.php');

/**
 * Filename of custom header file.
 */
define('CUSTOM_HEADER_FILE', CONFIG_DIR . 'config.header.inc.php');

/**
 * Filename of custom footer file.
 */
define('CUSTOM_FOOTER_FILE', CONFIG_DIR . 'config.footer.inc.php');

/**
 * Default value for check for version upgrades.
 */
define('VERSION_CHECK_DEFAULT', true);

/**
 * Path to files with compiled locales (*.mo)
 */
define('LOCALE_PATH', ROOT_PATH . 'locale' . DIRECTORY_SEPARATOR);

/**
 * Define the cache directory for routing cache an other cache files
 */
define('CACHE_DIR', ROOT_PATH . 'libraries' . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR);

我使用 php8.0。

感谢您的支持!

【问题讨论】:

仔细查看错误信息中的路径名。你真的有一个目录'/usr/share/phpmyadmin//var/lib/phpmyadmin/tmp/twig'吗? 【参考方案1】:

有同样的问题。解决方法:

    打开vendor_config.php:

    sudo nano /usr/share/phpmyadmin/libraries/vendor_config.php
    

    CTRL + W 并搜索 TEMP_DIR

    换行为:

    define('TEMP_DIR', '/var/lib/phpmyadmin/tmp/');
    

    CTRL + W 并搜索 CONFIG_DIR

    换行为:

    define('CONFIG_DIR', '/etc/phpmyadmin/');
    

    保存文件并退出。 (按 CTRL + X。按 Y 然后按 ENTER

    选择安装的版本:https://www.phpmyadmin.net/files/

    提取/libraries/classes/Config.php 文件并将其替换为现有文件。

感谢和问候。

【讨论】:

嗨,谢谢你的回答,但如果你阅读了我的帖子,它已经完成了;)并且没有任何改变。 @NansLOIGNE 根据你的问题,TEMP_DIR 被定义为ROOT_PATH . '/var/lib/phpmyadmin/tmp/' . DIRECTORY_SEPARATOR 而不仅仅是'/var/lib/phpmyadmin/tmp/'【参考方案2】:

启用模板缓存。编辑/usr/share/webapps/phpMyAdmin/config.inc.php 以添加该行:

$cfg['TempDir'] = '/tmp/phpmyadmin';

来源:https://wiki.archlinux.org/index.php/PhpMyAdmin#Enabling_template_caching

【讨论】:

/tmp 可能不可写:这行应该一直有效: $cfg['TempDir'] = sys_get_temp_dir() 。目录分隔符。 'phpmyadmin';【参考方案3】:

这是对 Saurabh 答案的补充。我不得不手动创建临时目录结构,并添加一个名为“twig”的附加目录。所以你可能需要创建:

/var/lib/phpmyadmin/tmp/twig

按照他们的说明创建临时目录后,一切正常。

【讨论】:

我遇到了同样的问题,我所做的只是创建一个新的 tmp 目录【参考方案4】:

如果这个问题没有解决,很可能是因为 apache 用户不是默认的www-data

安装phpmyadmin时,/var/lib/phpmyadmin/tmp默认归www-data所有。 因此,如果您更改了 apache 默认用户,它就无法写入此目录。

修复相当简单:

chown -R "apache-user:apache-group" /var/lib/phpmyadmin/*
chmod -R g+s /var/lib/phpmyadmin/tmp/

【讨论】:

以上是关于Phpmyadmin 5.1.0.RC1 & 5.0.4 错误(./libraries/classes/Config.php#1285 mkdir() 中的警告:权限被拒绝)的主要内容,如果未能解决你的问题,请参考以下文章

初次使用phpMyAdmin & MySql修改root密码

通过 java & phpmyadmin 从数据库中检索数据

如何为 spring webflux 应用程序配置 oauth2 资源服务器?

在 Android/phpMyAdmin 中插入数据库时​​出错

docker部署LNMP&phpMyAdmin

Ubuntu 18.04上安装 phpMyAdmin