Phpmyadmin 4.9.5 -> $cfg['TempDir'] (/var/lib/phpmyadmin/tmp/) 不可访问,即使它存在并且具有正确的权限
Posted
技术标签:
【中文标题】Phpmyadmin 4.9.5 -> $cfg[\'TempDir\'] (/var/lib/phpmyadmin/tmp/) 不可访问,即使它存在并且具有正确的权限【英文标题】:Phpmyadmin 4.9.5 -> The $cfg['TempDir'] (/var/lib/phpmyadmin/tmp/) is not accessible, even though it exists and has corrent permissionPhpmyadmin 4.9.5 -> $cfg['TempDir'] (/var/lib/phpmyadmin/tmp/) 不可访问,即使它存在并且具有正确的权限 【发布时间】:2020-12-25 10:27:41 【问题描述】:您好,我在使用 phpmyadmin 时遇到问题。 它基本上是一个全新安装的版本。我无法弄清楚为什么这不起作用。我还没有修改任何文件。
登录时显示以下错误消息:
The configuration file now needs a secret passphrase (blowfish_secret).
The $cfg['TempDir'] (/var/lib/phpmyadmin/tmp/) is not accessible. phpMyAdmin is not able to cache templates and will be slow because of this.
stat /var/lib/phpmyadmin/tmp
File: /var/lib/phpmyadmin/tmp
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 803h/2051d Inode: 170769 Links: 3
Access: (0777/drwxrwxrwx) Uid: ( 33/www-data) Gid: ( 33/www-data)
Access: 2020-09-07 02:26:51.239765744 +0200
Modify: 2020-06-26 03:45:53.392552054 +0200
Change: 2020-09-07 02:34:01.222889412 +0200
Birth: -
如上所述,我没有修改河豚秘密或任何其他文件
ls /var/lib/phpmyadmin/
blowfish_secret.inc.php tmp
配置文件看起来也是正确的。我什至尝试稍微改变一下路径,看看它是否有任何效果,是否是正确的配置文件。它显示相同的错误,但使用新路径。
sudo nano /usr/share/phpmyadmin/libraries/vendor_config.php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* File for vendor customisation, 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.
*
* @package PhpMyAdmin
*/
if (! defined('PHPMYADMIN'))
exit;
/**
* Path to vendor autoload file. Useful when you want to
* have have vendor dependencies somewhere else.
*/
define('AUTOLOAD_FILE', './autoload.php');
/**
* Directory where cache files are stored.
*/
define('TEMP_DIR', '/var/lib/phpmyadmin/tmp/');
/**
* Path to changelog file, can be gzip compressed. Useful when you want to
* have documentation somewhere else, eg. /usr/share/doc.
*/
define('CHANGELOG_FILE', '/usr/share/doc/phpmyadmin/changelog.gz');
/**
* Path to license file. Useful when you want to have documentation somewhere
* else, eg. /usr/share/doc.
*/
define('LICENSE_FILE', '/usr/share/doc/phpmyadmin/copyright');
/**
* Directory where SQL scripts to create/upgrade configuration storage reside.
*/
define('SQL_DIR', './sql/');
/**
* 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');
/**
【问题讨论】:
【参考方案1】:查看code,我看到当phpmyadmin 无法访问twig
temp 目录时,出现关于tmp
目录的消息。这意味着/var/lib/phpmyadmin/tmp/
可能可以访问,但/var/lib/phpmyadmin/tmp/twig
可能无法访问(例如权限错误或丢失)。
也可能是twig
临时目录不在/var/lib/phpmyadmin/tmp/
下,因为访问它他们使用:$this->config->getTempDir('twig')
,但报告有关tmp
的错误他们使用的目录路径: $this->config->get('TempDir')
。
见下文:
if ($this->config->getTempDir('twig') === null)
trigger_error(
sprintf(
__(
'The $cfg[\'TempDir\'] (%s) is not accessible. ' .
'phpMyAdmin is not able to cache templates and will ' .
'be slow because of this.'
),
$this->config->get('TempDir')
),
E_USER_WARNING
);
TLDR:该消息可能具有误导性。您应该检查树枝缓存目录是否可访问(所有权/权限)。
【讨论】:
感谢您的回复。不幸的是,它仍然无法正常工作。文件夹twig
存在,我使用以下命令获取所有权:sudo chown -R www-data:www-data /var/lib/phpmyadmin
。另外我尝试给它 777 权限,但仍然出现错误。
@xDrago 777 是危险且不必要的。确保给定的“临时”目录具有正确的所有者就足够了。这在 Web 服务器(即 Apache 和 Ngnix)和发行版(即 Fedora 和 Ubuntu)之间有所不同。
澄清我的帖子:1。 twig
目录可能无法在以下位置查找:/var/lib/phpmyadmin/tmp/
尽管(可能具有误导性)消息说了什么。 2。代码检查是否$this->config->getTempDir('twig') === null
。由于访问权限以外的其他原因(例如缺少配置文件),这可能为 null。在这种情况下,该消息也可能具有误导性。【参考方案2】:
能否请您检查目录/var/lib/phpmyadmin 的权限。 tmp 似乎是正确的权限。
ls -ld /var/lib/phpmyadmin
上面的目录应该是至少 755 权限或同样用于网络服务器的同一用户的所有权。
并检查selinux是否通过以下命令启用
强制执行
【讨论】:
能否请您尝试更改配置中的 tmp 目录路径一次。定义('TEMP_DIR','/tmp');并重启网络服务器【参考方案3】:我在 LEMP 堆栈上设置 PhpMyAdmin 版本 5.1.0 时遇到了这个问题。发行版是 Fedora 33,所有软件都使用默认存储库。
我发现不同发行版的安装默认值差别很大,并且在为我的特定安排进行设置时遇到了一些麻烦。这主要是由于我在故障排除过程中发现的相互矛盾的信息。
我这样说是因为问题的真正解决方案取决于根据您的安装设置正确的目录所有者和路径。
在我的安装中,$PMA-DIR/config.inc.php
的工作目录存在于/var/lib/phpMyAdmin/
中。
所以我收到的登录错误如下:
The $cfg['TempDir'] (/var/lib/phpMyAdmin/temp/) is not accessible. phpMyAdmin is not able to cache templates and will be slow because of this.
所以我在那里查看了 PMA 主目录的详细信息:
ls -l /var/lib/phpMyAdmin
结果是:
drwxr-x--- 2 apache apache 4096 Apr 6 02:25 cache
drwxr-x--- 2 apache apache 4096 Mar 16 13:29 config
drwxr-x--- 2 apache apache 4096 Mar 16 13:29 save
drwxr-x--- 3 apache apache 4096 Apr 6 13:58 temp
drwxr-x--- 2 apache apache 4096 Mar 16 13:29 upload
如果我使用httpd
作为网络服务器,那就没问题了。但是,我正在运行 nginx,因此我需要分别更改所有权:
chown -R nginx:nginx /var/lib/phpMyAdmin
现在我可以看到ls -l /var/lib/phpMyAdmin/
显示:
drwxr-x--- 2 nginx nginx 4096 Apr 6 02:25 cache
drwxr-x--- 2 nginx nginx 4096 Mar 16 13:29 config
drwxr-x--- 2 nginx nginx 4096 Mar 16 13:29 save
drwxr-x--- 3 nginx nginx 4096 Apr 6 13:58 temp
drwxr-x--- 2 nginx nginx 4096 Mar 16 13:29 upload
为了确保phpMyAdmin
和我真的在谈论同一个目录,我编辑了我的$PMA-DIR/config.inc.php
并将相关部分修改为如下所示:
/**
* Directories for saving/loading files from server
*/
$cfg['UploadDir'] = '/var/lib/phpMyAdmin/upload';
$cfg['SaveDir'] = '/var/lib/phpMyAdmin/save';
$cfg['TempDir'] = '/var/lib/phpMyAdmin/temp';
重新加载nginx
并刷新后,我的错误消失了。
对于您的用例,很可能是您的用户与所需用户不同。
我看到很多指南将用户列为www-data
,但在某些情况下,用户是nobody
/apache
/httpd
。
要找到合适的,你可以运行类似ps aux | egrep '(apache|apache2|httpd|nginx)'
的东西。
结果中的第一个字段应该是正确的所有者。
如上所示,使用chown
将其应用到正确的路径。
如果您已经设置了其余配置,并且在此之后仍然出现 Blowfish 设置错误;那么您可能有一个单独的文件夹来存放需要更改所有权的主要配置。
对我来说,这是由于 Fedora 安装使用 /etc/phpMyAdmin
目录作为主配置目录。
它归apache
所有。设置为nginx
后,河豚错误也消失了。
TL;DR: 使用 LEMP(Nginx) 在 Fedora 33 上解决:
chown -R nginx:nginx /var/lib/phpMyAdmin
和
chown -R nginx:nginx /etc/phpMyAdmin
【讨论】:
以上是关于Phpmyadmin 4.9.5 -> $cfg['TempDir'] (/var/lib/phpmyadmin/tmp/) 不可访问,即使它存在并且具有正确的权限的主要内容,如果未能解决你的问题,请参考以下文章
致命错误:未捕获的错误:在 C:\xampp\phpMyAdmin\libraries\classes\DatabaseInterface.php:1544 中的 null 上调用成员函数存在()