phpmyadmin - count(): параметр должен быть массивом или объектом, который реализует счетное
Я загрузил резервную копию в таблицу, открыв таблицу, я вижу это:
Warning in ./libraries/sql.lib.php#601
count(): Parameter must be an array or an object that implements Countable
Backtrace
./libraries/sql.lib.php#2038: PMA_isRememberSortingOrder(array)
./libraries/sql.lib.php#1984: PMA_executeQueryAndGetQueryResponse(
array,
boolean true,
string 'alternativegirls',
string 'tgp_photo',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
string '',
string './themes/pmahomme/img/',
NULL,
NULL,
NULL,
string 'SELECT * FROM `tgp_photo`',
NULL,
NULL,
)
./sql.php#216: PMA_executeQueryAndSendQueryResponse(
array,
boolean true,
string 'alternativegirls',
string 'tgp_photo',
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
string '',
string './themes/pmahomme/img/',
NULL,
NULL,
NULL,
string 'SELECT * FROM `tgp_photo`',
NULL,
NULL,
)
./index.php#53: include(./sql.php)
Внутри phpMyAdmin...
PHP - 7.2, сервер - Ubuntu 16.04, установлен вчера.
В поисках я увидел, что у некоторых есть эта ошибка в их коде, но я не нашел никого, кто получил это в phpMyAdmin...
Что я должен делать? Это моя ошибка? Ошибка phpmyadmin? ждать обновления? Я вернусь к PHP 7.1?
45 ответов
Редактировать файл /usr/share/phpmyadmin/libraries/sql.lib.php
:
sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
Заменить: count($analyzed_sql_results['select_expr'] == 1)
С: (count($analyzed_sql_results['select_expr']) == 1)
Перезагрузите сервер
sudo service apache2 restart
Самый простой метод:
Просто запустите приведенную ниже командную строку в терминале и вернитесь в PhpMyAdmin. Теперь работает нормально:)
sudo sed -i "s/|\s*\((count(\$analyzed_sql_results\['select_expr'\]\)/| (\1)/g" /usr/share/phpmyadmin/libraries/sql.lib.php
Ручной метод:
Открыть файл sql.lib.php
nano /usr/share/phpmyadmin/libraries/sql.lib.php
Найти для count($analyzed_sql_results['select_expr']
код в файле. Вы можете получить это в строке ~ 613. Вы можете увидеть это ниже неправильный код
|| (count($analyzed_sql_results['select_expr'] == 1)
Просто замените этот неправильный код следующим
|| ((count($analyzed_sql_results['select_expr']) == 1)
Сохраните файл и зайдите в PhpMyAdmin.
Теперь работает нормально:)
Я нашел этот счетчик PHP 7.2 () - ошибка SYNTAX в sql.lib.php
Это прекрасно работает в моем конфиге:
Debian 9,
PHP 7.2.3-1+0~20180306120016.19+stretch~1.gbp81bf3b (cli) (built: Mar 6 2018 12:00:19) ( NTS )
открыто /usr/share/phpmyadmin/libraries/sql.lib.php
Изменить строку: переместить скобки перед ==
|| (count ($ analysis_sql_results ['select_expr'] == 1 )
в
function PMA_isRememberSortingOrder($analyzed_sql_results){
return $GLOBALS['cfg']['RememberSorting']
&& ! ($analyzed_sql_results['is_count']
|| $analyzed_sql_results['is_export']
|| $analyzed_sql_results['is_func']
|| $analyzed_sql_results['is_analyse'])
&& $analyzed_sql_results['select_from']
&& ((empty($analyzed_sql_results['select_expr']))
|| (count($analyzed_sql_results['select_expr'] ) == 1
&& ($analyzed_sql_results['select_expr'][0] == '*')))
&& count($analyzed_sql_results['select_tables']) == 1;
}
Протестирован на Debian, должен работать на Ubuntu:
1.) Сначала загрузите последний файл phpMyadmin.
2.) Удалить (сделать резервную копию) все предыдущие версии файла, расположенного в /usr/share/phpmyadmin
каталог.
3.) Распакуйте в /usr/share/phpmyadmin/
каталог всех файлов последней версии phpmyadmin.
4.) Изменить файл libraries/vendor_config.php
и измените строку:
define('CONFIG_DIR', '');
в
define('CONFIG_DIR', '/etc/phpmyadmin/');
а также
define('TEMP_DIR', './tmp/');
в
define('TEMP_DIR', '/tmp/');
5.) Перезапустите сервер Apache и все готово.
Редактировать файл: '/usr/share/phpmyadmin/libraries/sql.lib.php'
Заменить: (count($analyzed_sql_results['select_expr'] == 1)
С: (count($analyzed_sql_results['select_expr']) == 1
это сработало для меня
Если у кого-то есть похожая ошибка на странице экспорта БД (у меня была эта проблема в Ubuntu 18.04), то замените строку 551 в файле /usr/share/phpmyadmin/libraries/plugin_interface.lib.php
с кодом
if ($options != null && (is_array($options) || $options instanceof Countable) && count($options) > 0) {
Works on UBUNTU 18.04
Edit file: '/usr/share/phpmyadmin/libraries/sql.lib.php'
Replace: (count($analyzed_sql_results['select_expr'] == 1)
With: ((count($analyzed_sql_results['select_expr']) == 1)
Restart the server
sudo service apache2 restart
phpmyadmin 4.7.4 должен иметь "Исправлено несколько проблем совместимости с PHP 7.2"
Скорее всего, у вас есть старая версия phpmyadmin.
https://www.phpmyadmin.net/news/2017/8/24/phpmyadmin-474-released/
Ubuntu 18.04 LTS
Эти шаги сработали для меня. Большое, большое спасибо Уильяму Деспорту за предоставление автоматических обновлений для их Ubuntu PPA.
Шаг 1 ( из сообщения Уильяма Деспорта)
$sudo add-apt-repository ppa:phpmyadmin/ppa
Шаг 2
$sudo apt-get --with-new-pkgs upgrade
Шаг 3
$sudo service mysql restart
Если у вас возникли проблемы с перезапуском mysql, вы также можете перезапустить его со следующей последовательностью
$sudo service mysql stop;
$ sudo service mysql start;
Выполните следующие шаги в Ubuntu-18.04:
Шаг 1) найдите sql.lib.php
Это покажет что-то вроде:
/usr/share/phpmyadmin/libraries/sql.lib.php
Шаг 2) Откройте терминал (Alt t) и напишите:
sudo /usr/sbin/pma-configure
Шаг 3)sudo gedit /usr/share/phpmyadmin/libraries/sql.lib.php
и поиск ниже функции:
функция PMA_isRememberSortingOrder($analysis_sql_results) { вернуть $GLOBALS['cfg']['RememberSorting'] &&! ($ Analyzed_sql_results['is_count'] || $analyzed_sql_results['is_export'] || $analyzed_sql_results['is_func'] || $analyzed_sql_results['is_analyse']) && $analysis_sql_results['select_from'] && ((пусто ($ analysis_sql_results['select_expr'])) || (count($analysis_sql_results['select_expr'] == 1) && ($analysis_sql_results['select_expr'][0] == '*'))) && count($analysis_sql_results['select_tables']) == 1; }
Шаг 4) Замените вышеуказанную функцию на:
функция PMA_isRememberSortingOrder($analysis_sql_results) { вернуть $GLOBALS['cfg']['RememberSorting'] &&! ($ Analyzed_sql_results['is_count'] || $analyzed_sql_results['is_export'] || $analyzed_sql_results['is_func'] || $analyzed_sql_results['is_analyse']) && $analysis_sql_results['select_from'] && ((пусто ($ analysis_sql_results['select_expr'])) || (count($analysis_sql_results['select_expr']) == 1) && ($analysis_sql_results['select_expr'][0] == '*')) && count($analysis_sql_results['select_tables']) == 1; }
Шаг 4) Сохранить и закрыть файл и команду ниже на терминале
sudo /usr/sbin/pma-secure
Шаг 5) sudo service mysql reload
Шаг 6) sudo service apache2 reload
Это работает для меня.. Goodluck
откройте этот файл: '/usr/share/phpmyadmin/libraries/sql.lib.php'
sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
нажмите ctrl+w для поиска (count($analysis_sql_results['select_expr'] == 1)
Find: count($analyzed_sql_results['select_expr'] == 1)
Replace With: (count($analyzed_sql_results['select_expr']) == 1)
Перезагрузите сервер
sudo service apache2 restart
Я думаю, что лучший вариант - обновить Phpmyadmin до версии, в которой это уже исправлено.
Пока он не будет опубликован как deb, вы можете сделать это как в ответе @crimson-501, который я скопирую ниже:
- Ваш первый шаг - установить PMA (phpMyAdmin) из официального репозитория Ubuntu:
apt-get install phpmyadmin
, - Затем перейдите в каталог usr/share:
cd /usr/share
, - В-третьих, удалите каталог phpmyadmin:
rm -rf phpmyadmin
, - Теперь нам нужно загрузить последнюю версию PMA в нашу систему (обратите внимание, что вам нужен wget:
apt-get install wget
):wget -P /usr/share/ "https://files.phpmyadmin.net/phpMyAdmin/4.8.2/phpMyAdmin-4.8.2-english.zip"
Позвольте мне объяснить аргументы этой команды: -P определяет путь, а "link.zip" в настоящее время (17.07.18) является последней версией PMA. Вы можете найти эти ссылки ЗДЕСЬ. - Для этого следующего шага вам нужно распаковать (
apt-get install unzip
):unzip phpMyAdmin-4.8.2-english.zip
, Мы только что распаковали PMA, теперь мы перенесем его в последний дом. - Давайте использовать
cp
(копия) команда для перемещения наших файлов! Обратите внимание, что мы должны добавить-r
аргумент, так как это папка.cp -r phpMyAdmin-4.8.2-english phpmyadmin
, - Теперь пришло время убирать
rm -rf phpMyAdmin-4.8.2-english
,
Продолжай читать!
Теперь вы можете заметить две ошибки после входа в PMA.
the configuration file now needs a secret passphrase (blowfish_secret). phpmyadmin
The $cfg['TempDir'] (./tmp/) is not accessible. phpMyAdmin is not able to cache templates and will be slow because of this.
Однако эти проблемы относительно легко исправить. Для первой проблемы все, что вам нужно сделать, это взять ваш редактор по выбору и редактировать /usr/share/phpmyadmin/config.inc.php
но есть проблема, мы ее убрали! Это нормально, все, что вам нужно сделать, это: cd /usr/share/phpmyadmin
& cp config.sample.inc.php config.inc.php
,
- Теперь мы добавим наш Blowfish Secret!
nano config.inc.php
и скопируйте динамически сгенерированный секрет из нижней части этой страницы: https://www.question-defense.com/tools/phpmyadmin-blowfish-secret-generator.
Пример phpMyAdmin Запись секретной переменной Blowfish:
/*
* This is needed for cookie based authentication to encrypt password in
* cookie
*/
$cfg['blowfish_secret'] = '{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V';
/* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
Теперь сохраните и закройте файл.
- Теперь мы создадим каталог tmp для PMA:
mkdir tmp
&chown -R www-data:www-data /usr/share/phpmyadmin/tmp
, Последняя команда позволяет веб-серверу Apache владеть каталогом tmp и редактировать его содержимое.
Попробуйте заменить эту функцию в файле: /usr/share/phpmyadmin/libraries/sql.lib.php
function PMA_isRememberSortingOrder($analyzed_sql_results)
{
return $GLOBALS['cfg']['RememberSorting']
&& ! ($analyzed_sql_results['is_count']
|| $analyzed_sql_results['is_export']
|| $analyzed_sql_results['is_func']
|| $analyzed_sql_results['is_analyse'])
&& $analyzed_sql_results['select_from']
&& ((empty($analyzed_sql_results['select_expr']))
|| (count($analyzed_sql_results['select_expr']) == 1)
&& ($analyzed_sql_results['select_expr'][0] == '*'))
&& count($analyzed_sql_results['select_tables']) == 1;
}
Работа для меня.. Ubuntu 18.04
sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
Найти для count($analyzed_sql_results['select_expr']
код в файле. Вы можете получить это в строке ~613.
|| (count($analyzed_sql_results['select_expr'] == 1)
Просто замените код:
|| ((count($analyzed_sql_results['select_expr']) == 1)
Сохраните файл и перезагрузите PhpMyAdmin.
Готово!!!
Ubuntu 18.10 (декабрь 2018 г.)
Строки 613, 614, 615 заменить на:
|| count($analyzed_sql_results['select_expr']) == 1
&& ($analyzed_sql_results['select_expr'][0] == '*'))
&& count($analyzed_sql_results['select_tables']) == 1;
Для моей версии phpmyadmin (4.6.6deb5) я нашел строку 613 и понял, что круглые скобки count() закрыты неправильно. Чтобы временно исправить это до следующего выпуска, просто измените:
|| (count($analyzed_sql_results['select_expr'] == 1)
кому:
|| (count($analyzed_sql_results['select_expr']) == 1
Это сработало для меня;
sudo nano /usr/share/phpmyadmin/libraries/sql.lib.php
Строка №: 614
Заменить два кода:
Заменять:
(count($analyzed_sql_results[‘select_expr’] == 1)
С участием:
(count($analyzed_sql_results[‘select_expr’]) == 1)
А ТАКЖЕ
Заменять:
($analyzed_sql_results[‘select_expr’][0] == ‘*’)))
С участием:
($analyzed_sql_results[‘select_expr’][0] == ‘*’))
сохранить, выйти и запустить
sudo service apache2 restart
Предупреждение в./libraries/plugin_interface.lib.php#532
count(): параметр должен быть массивом или объектом, который реализует счетное
Пример библиотеки phpmyadmin попытаться посчитать какой-либо параметр. В этой строке 532 я нашел этот код по этому пути.
Редактировать файл /usr/share/phpmyadmin/libraries/plugin_interface.lib.php
в строке 532:
sudo nano /usr/share/phpmyadmin/libraries/plugin_interface.lib.php
Найти строку if ($options != null && count($options) > 0) {
и заменить count($options)
с count((array)$options)
,
Перезапустите службу Apache:
sudo service apache2 restart
В новой версии php он не может использовать count() или sizeof() с типом un array. Таким образом, вы должны принудительно изменить параметр в массив здесь.
Это исправлено в более поздних версиях PHPMyAdmin. Репозитории программного обеспечения Ubuntu для Ubuntu 18.04.2 содержат версию 4.6.6.5, в то время как в настоящее время они находятся на уровне 4.9.0.1. Обновление установки PHPMyAdmin устранит эту проблему, но может оказаться более рискованным, чем просто редактирование этой одной строки кода. Вот как я сделал это на своем сервере Ubuntu. Шаги по существу одинаковы (с другим путем) для всех операционных систем.
- Загрузите PHPMyAdmin.
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.zip
unzip phpMyAdmin-4.9.0.1-all-languages.zip
- Сделайте резервную копию вашей старой установки PHPMyAdmin.
cp -r /usr/share/phpmyadmin ~/phpmyadmin-backup
- Перетащите новый PHPMyAdmin на старый PHPMyAdmin
cd phpMyAdmin-4.9.0.1-all-languages
rm -r /usr/share/phpmyadmin/doc/html
cp -R * /usr/share/phpmyadmin/
Убедитесь, что это работает. Если нет, то хорошо... У вас есть резервная копия, поэтому восстановите ее и вручную отредактируйте неисправную строку. На собственном опыте я обнаружил, что после этого я обнаружил, что версия 4.6.6.5 не только изобилует ошибками, но и невероятно медленная по сравнению с новой версией 4.9.0.1. Увеличение скорости было чистой магией для чего-то, что, как мне казалось, было "WordPress".
Работает на UBUNTU 16.04.3 Просто открыть
USR / доли / библиотеки /sql.lib.php
модифицировать
|| (count($analyzed_sql_results['select_expr'] == 1)
к
|| ((count($analyzed_sql_results['select_expr']) == 1)
У меня это хорошо сработало в Ubuntu 18.04.
Откройте файл sql.lib.php
nano +613 /usr/share/phpmyadmin/libraries/sql.lib.php
Замените этот неправильный код:
|| (count($analyzed_sql_results['select_expr'] == 1)
С этим:
|| ((count($analyzed_sql_results['select_expr']) == 1)
Сохраните файл.
Перезагрузите сервер:
sudo service apache2 restart
И обновите PhpMyAdmin
Обновление до phpMyAdmin 4.8.3. это решает проблемы совместимости PHP 7.2
Изменить файл '/usr/share/phpmyadmin/libraries/sql.lib.php' Заменить: (сделать резервную копию)
"|| (count($analyzed_sql_results['select_expr'] == 1)
&&($analyzed_sql_results['select_expr'][0] == '*')))
&& count($analyzed_sql_results['select_tables']) == 1;"
С:
"|| (count($analyzed_sql_results['select_expr']) == 1)
&& ($analyzed_sql_results['select_expr'][0] == '*')
&& (count($analyzed_sql_results['select_tables']) == 1));"
Привет следующее решить мою проблему абсолютно (импорт / экспорт и так далее):
Исправить ошибку Phpmyadmin [plugin_interface.lib.php] + Php7.2 + Ubuntu 16.04
так... под Ubuntu 18.04, MySQL, php7.2: Терминал:
sudo gedit /usr/share/phpmyadmin/libraries/plugin_interface.lib.php
Найдите следующую строку (ctrl+f):
if ($options != null && count($options) > 0) {
это было на линии № 551 для меня
и изменить на следующее:
if ($options != null && count((array)$options) > 0) {
Ctrl + S для сохранения изменений
и в терминале: Ctrl + C для возврата назад...
а также: sudo systemctl restart apache2
"Я думаю, в новой версии php. Он не может использовать count() или sizeof() с типом массива un. Форсировать параметр в массив - это простой способ решить эту ошибку,..."
Спасибо за оригинального автора для решения проблемы! Я пытаюсь поделиться этим!
|| ((count($analyzed_sql_results['select_expr']) == 1
Это то, что я изменил в строке 614, и phpmyadmin работает без ошибок. Нужен один (
до подсчета и один )
до ==
, Вот и все.
Просто исправьте функцию count() и закрывающие круглые скобки со строк с 604 по 615 в файле /usr/share/phpmyadmin/libraries/sql.lib.php.
function PMA_isRememberSortingOrder($analyzed_sql_results)
{
return $GLOBALS['cfg']['RememberSorting']
&& ! ($analyzed_sql_results['is_count']
|| $analyzed_sql_results['is_export']
|| $analyzed_sql_results['is_func']
|| $analyzed_sql_results['is_analyse'])
&& $analyzed_sql_results['select_from']
&& ((empty($analyzed_sql_results['select_expr']))
|| (count($analyzed_sql_results['select_expr']) == 1)
&& ($analyzed_sql_results['select_expr'][0] == '*'))
&& count($analyzed_sql_results['select_tables']) == 1;
}
Я испробовал все вышеперечисленное решение, но у меня не получилось.
Попробуй это:-
Установите требуемую версию PHP(в моем случае 7.0), а затем в терминале введите
sudo update-alternatives --config php
Вывод будет таким:
Затем вы можете переключиться на любую версию PHP, просто введя номер выбора (в моем случае 1).
Надеюсь, что это может помочь другим -:)
Открой /usr/share/phpmyadmin/sql.lib.php
файл с повышенными привилегиями, и отредактируйте следующее в функции PMA_isRememberSortingOrder()
:
- Строка 613, чтобы исправить начальную ошибку:
- замещать
|| count($analyzed_sql_results['select_expr'] == 1)
- С
|| (count($analyzed_sql_results['select_expr']) == 1)
- замещать
- Строка 614, чтобы исправить ошибку 500, которая, вероятно, последует:
- замещать
&& ($analyzed_sql_results['select_expr'][0] == '*')))
- С
&& ($analyzed_sql_results['select_expr'][0] == '*'))
- замещать
Перезагрузите сервер Apache: sudo service apache2 restart
,
Протестировано на Linux Mint 19.1 на основе Ubuntu 18.04, с PhpMyAdmin 4.6.6 и PHP 7.2.
Заменить функцию:
function PMA_isRememberSortingOrder($analyzed_sql_results) {
return $GLOBALS['cfg']['RememberSorting']
&&!(
$analyzed_sql_results['is_count']
|| $analyzed_sql_results['is_export']
|| $analyzed_sql_results['is_func']
|| $analyzed_sql_results['is_analyse']
)&&
$analyzed_sql_results['select_from']&&
(
empty($analyzed_sql_results['select_expr'])||
count($analyzed_sql_results['select_expr'])==1&&
$analyzed_sql_results['select_expr'][0] == '*'
)
&& count($analyzed_sql_results['select_tables']) == 1;
}
add-apt-repository ppa:phpmyadmin/ppa
apt-get clean
apt-get update
apt-get purge phpmyadmin
apt-get install phpmyadmin
Исправлено это для меня в Ubuntu 18.04.