При импорте базы данных в phpMyAdmin на виртуальном сервере OpenServer возникает ошибка: Maximum execution time of 300 seconds exceeded in \OSPanel\modules\system\html\openserver\phpmyadmin\libraries\classes\Dbal\DbiMysqli.php on line 209. Причём, эта ошибка возникает даже после того, как в настройках PHP увеличили параметры max_execution_time, max_input_time, memory_limit, post_max_size, upload_max_filesize.
Дело в том, что phpMyAdmin имеет собственные ограничения в настройках, которые не зависят от глобальных параметров PHP. Поэтому кроме изменений в настройках PHP нужно ещё внести корректировки в два файла:
- OpenServer\modules\system\html\openserver\phpmyadmin\libraries\config.default.php
- OpenServer\modules\system\html\openserver\phpmyadmin\libraries\classes\Config\Settings.php
В файле config.default.php найдите и увеличьте значение параметра $cfg['ExecTimeLimit']. Например, если у вас $cfg['ExecTimeLimit'] = 300, то сделайте $cfg['ExecTimeLimit'] = 3000.
А в файле Settings.php найдите и замените 300 на 3000 в функции:
private function setExecTimeLimit(array $settings): int
{
if (! isset($settings['ExecTimeLimit'])) {
return 300;
}
$execTimeLimit = (int) $settings['ExecTimeLimit'];
return $execTimeLimit >= 0 ? $execTimeLimit : 300;
}
После этого перезапустите OpenServer. Если вы всё сделали правильно, то ошибка уже не должна возникать.
Справка об ExecTimeLimit
ExecTimeLimit — это внутренний параметр phpMyAdmin, который определяет, сколько секунд максимально может выполняться любая операция (например, импорт SQL-дампа) в веб-интерфейсе. Он игнорирует значение max_execution_time из php.ini и выставляет свой лимит.
$cfg['ExecTimeLimit'] = 300 означает, что любой импорт или сложный запрос остановится через 300 секунд (5 минут).
Если установить $cfg['ExecTimeLimit'] = 0, то этим вы отмените ограничение и скрипт сможет работать столько, сколько нужно.
