Ошибка Phpmyadmin 5.1.0.RC1 и 5.0.4 (предупреждение в ./libraries/classes/Config.php#1285 mkdir(): отказано в разрешении)

#php #phpmyadmin #permission-denied #mkdir #php-8

#php #phpmyadmin #разрешение-отклонено #mkdir #php-8

Вопрос:

Я тестирую phpmyadmin 5.0.4 и 5.1.0.RC1 на ubuntu server 20.04, и я получаю следующую ошибку :

 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: PhpMyAdminConfig->getTempDir(string 'twig')
./libraries/classes/Theme.php#101: PhpMyAdminTemplate->__construct()
./libraries/classes/Theme.php#174: PhpMyAdminTheme->__construct()
./libraries/classes/ThemeManager.php#307: PhpMyAdminTheme::load(
string './themes/pmahomme',
string '/usr/share/phpmyadmin/./themes/pmahomme/',
)
./libraries/classes/ThemeManager.php#79: PhpMyAdminThemeManager->loadThemes()
./libraries/classes/ThemeManager.php#121: PhpMyAdminThemeManager->__construct()
./libraries/classes/ThemeManager.php#385: PhpMyAdminThemeManager::getInstance()
./libraries/common.inc.php#232: PhpMyAdminThemeManager::initializeTheme()
./index.php#15: require_once(./libraries/common.inc.php)
 

Я пытаюсь сменить владельца моего ./libraries/classes/Config.php и /var/lib/phpmyadmin/tmp/twig (также создал эту папку «twig») с помощью www-data (исходный «root»), но ошибка не была устранена.

моя конфигурация поставщика :

 <?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.

Спасибо вашим спинам !

Комментарии:

1. Внимательно посмотрите на имя пути в сообщении об ошибке. У вас действительно есть каталог '/usr/share/phpmyadmin//var/lib/phpmyadmin/tmp/twig' ?

Ответ №1:

Включить кэширование шаблонов. Отредактируйте /usr/share/webapps/phpMyAdmin/config.inc.php , чтобы добавить строку:

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

Источник: https://wiki .archlinux.org/index.php/PhpMyAdmin#Enabling_template_caching

Комментарии:

1. /tmp может быть недоступен для записи: эта строка должна работать все время: $cfg[‘TempDir’] = sys_get_temp_dir() . DIRECTORY_SEPARATOR . ‘phpmyadmin’;

Ответ №2:

Это дополнение к ответу Саурабха. Мне пришлось вручную создать временную структуру каталогов и добавить дополнительный каталог под названием «twig». Поэтому вам может потребоваться создать:

 /var/lib/phpmyadmin/tmp/twig
 

После выполнения их инструкций и создания временных каталогов все работало нормально.

Комментарии:

1. У меня была такая же проблема, и все, что я сделал, это создал новый каталог tmp

Ответ №3:

Была такая же проблема. Решил ее с помощью:

  1. Открыть vendor_config.php :
     sudo nano /usr/share/phpmyadmin/libraries/vendor_config.php
     
  2. Нажмите CTRL Wи выполните поиск TEMP_DIR
  3. Измените строку на:
     define('TEMP_DIR', '/var/lib/phpmyadmin/tmp/');
     
  4. Нажмите CTRL Wи выполните поиск CONFIG_DIR
  5. Измените строку на:
     define('CONFIG_DIR', '/etc/phpmyadmin/');
     
  6. Сохраните файл и выйдите. (Нажмите CTRL X. НажмитеY, а затем нажмите ENTER)
  7. Выберите установленную версию: https://www.phpmyadmin.net/files /
  8. Извлеките и замените /libraries/classes/Config.php файл существующим.

Спасибо и с уважением.

Комментарии:

1. Привет, спасибо за ваш ответ, но если вы прочитали мой пост, это уже сделано 😉 и ничего не изменится.

2. @NansLOIGNE Согласно вашему вопросу, TEMP_DIR определяется как ROOT_PATH . '/var/lib/phpmyadmin/tmp/' . DIRECTORY_SEPARATOR не просто '/var/lib/phpmyadmin/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/