Когда в закромах репозитория лежат старые версии phpMyAdmin
Со времени выпуска Ubuntu 18.04 и других дистрибутивов Linux у многих людей возникли проблемы с совместимостью PHP 7.2 и phpMyAdmin 4.6. В посте мы разберем как решить эту проблему и что делать дальше
Когда у вас стоит phpMyAdmin и в репозитории не обновляют последнюю версию, а warning'ы типа
“Warning in ./libraries/sql.lib.php#613 count(): Parameter must be an array or an object that implements Countable”
уже начинают доставать, то тут либо заходить в каждый файл и заменять строчки кода;
count($analyzed_sql_results['select_expr'] == 1
на
((count($analyzed_sql_results['select_expr']) == 1)
либо же, что логичнее всего, обновить версию phpMyAdmin до последней версии, вручную.
На всякий пожарный случай, можно сделать резервную копию текущей папки phpMyAdmin, переместив ее с добавлением к имени, что-нибудь типа bak:
sudo mv /usr/share/phpmyadmin/ /usr/share/phpmyadmin.bak
Зайдите в папку phpMyAdmin, скорее всего это будет:
cd /usr/share/phpmyadmin
Далее, зайдите на страницу загрузок phpMyadmin, скопируйте ссылку на последнюю версию, и загрузите zip архив с помощью wget:
sudo wget -P https://files.phpmyadmin.net/phpMyAdmin/4.9.2/phpMyAdmin-4.9.2-all-languages.zip
На сегодняшний день, последняя стабильная версия 4.9.2. Если теперь доступна более поздняя версия, не забудьте изменить версию в ссылке.
Далее распакуем архив с помощью unzip, если нет данной утилиты, то установите ее sudo apt-get install unzip:
sudo unzip phpMyAdmin-4.9.2-all-languages.zip
Для надежности используем команду cp (копировать), чтобы скопировать распакованную папку! Обратите внимание, что необходим -r аргумент, так как это папка:
sudo cp -r phpMyAdmin-4.9.2-all-languages phpmyadmin
Если все прошло успешно можно удалить ненужные папку и архивы:
sudo rm -rf phpMyAdmin-4.9.2-all-languages
sudo rm phpMyAdmin-4.9.2-all-languages.zip
sudo rm -rf phpmyadmin.bak
Теперь же зайдя по адресу /phpmyadmin мы уже можем увидеть обновленную версию PMA, но внизу будут предупреждения об отсутствии временной папки tmp и пустой парольной фразе blowfish_secret:
Чтобы исправить данную проблему, можно пойти двумя путями:
Первый вариант - это замена в файле "/usr/share/phpmyadmin/libraries/vendor_config.php" параметры TEMP_DIR и CONFIG_DIR на значения ниже:
sudo nano /usr/share/phpmyadmin/libraries/vendor_config.php
define('TEMP_DIR', '/var/lib/phpmyadmin/tmp/');
и
define('CONFIG_DIR', '/etc/phpmyadmin/');
phpMyAdmin теперь будет генерировать собственный blowfish_secret на основе каталога установки.
Второй вариант - создать временную папку в корне /usr/share/phpmyadmin, как ссылается параметр конфига TEMP_DIR и назначить ей владельца пользователя www-data:
cd /usr/share/phpmyadmin
sudo mkdir tmp
sudo chown -R www-data:www-data /usr/share/phpmyadmin/tmp
Предупреждение о папке tmp должно исчезнуть в phpMyAdmin.
Далее нужно скопировать сэмпл конфигурационного файла config.sample.inc.php в config.inc.php, найти параметр blowfish_secret и вставить вместо пустой строки свой хэш:
cd /usr/share/phpmyadmin
sudo cp config.sample.inc.php config.inc.php
sudo nano config.inc.php
Сгенерируйте произвольный хеш и вставьте в параметр конфига blowfish_secret:
/*
* This is needed for cookie based authentication to encrypt password in
* cookie
*/
$cfg['blowfish_secret'] = Fsdf34fSDFsegasg4ge4gw34Gg4g4$6%645gd';
/* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
сохраните файл. Предупреждение об blowfish_secret так же должно исчезнуть.
Второй вариант прост в использовании, но лучше все же изменять vendor_config, что даст некоторые преимущества в работе с phpMyadmin в будущем.
Чтобы процесс обновления проходил более удобнее и быстрее я написал bash скрипт, который доступен по адресу https://github.com/sinbadxiii/pma-updater , достаточно будет склонировать себе репозиторий и запустить скрипт обновления phpMyAdmin до последней версии командой:
sudo ./update.sh
Веб-разработчик со стажем программирования более 13 лет, постоянно учусь, люблю делать новые проекты.