Під час імпорту бази даних в 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, то цим ви скасуєте обмеження і скрипт зможе працювати стільки, скільки потрібно.
