PHP: максимальное время выполнения при импорте .SQL файла данных
Я пытаюсь импортировать большой .sql файл данных с помощью phpMyAdmin в XAMPP. Однако это занимает много времени, и я постоянно получаю ошибку:
Fatal error: Maximum execution time of 300 seconds exceeded in C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php on line 285
Размер файла составляет около 30 МБ, и он содержит около 1,2 миллиона строк, так что он не кажется слишком большим. Я не совсем понимаю, почему процесс занимает так много времени.
Вот часть конфигурации php.ini в XAMPP:
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
max_execution_time=30000
; Maximum amount of time each script may spend parsing request data.
max_input_time=60
; Maximum memory a script may consume (128MB)
memory_limit=200M
Несмотря на то, что я установил max_execution_time
на 30000, я все равно получаю ошибку о превышении максимального времени выполнения в 300 секунд.
Как я могу решить эту проблему и успешно импортировать файл?
5 ответ(ов)
В директории phpMyAdmin есть переменная конфигурации, которую вы можете найти в файле phpmyadmin/config.inc.php
, под названием $cfg['ExecTimeLimit']
. Вы можете установить её значение в соответствии с необходимым вам максимальным временем выполнения.
Чтобы настроить только 3 параметра в файле php.ini
вашего сервера, выполните следующие шаги:
Установите
max_execution_time = 3000000
(Задайте значение в соответствии с вашими требованиями).Установите
post_max_size = 4096M
.Установите
upload_max_filesize = 4096M
.
После этого не забудьте отредактировать файл C:\xampp\phpMyAdmin\libraries\config.default.php
, добавив следующую строку:
$cfg['ExecTimeLimit'] = 0;
После всех изменений перезапустите сервер и снова попробуйте импортировать вашу базу данных.
Готово!
Когда вы пытаетесь импортировать большой набор данных через веб-интерфейс, может возникнуть проблема с превышением лимита времени выполнения скрипта PHP. По умолчанию скрипты PHP, запущенные в контексте веб-сервера, имеют этот лимит, чтобы избежать ситуации, когда один проблемный скрипт забивает сервер и приводит к отказу в обслуживании.
По этой причине ваш импорт, скорее всего, не проходит. PHPMyAdmin — это веб-приложение, которое сталкивается с ограничениями, установленными PHP.
Вы можете попробовать увеличить этот лимит, но это плохая идея, так как он существует по веской причине. Запуск скрипта, который требует много времени для выполнения, на веб-сервере — это довольно рискованное решение.
PHPMyAdmin не предназначен для выполнения тяжелых задач вроде этой — он больше подходит для рутинных операций и устранения неполадок.
Лучший вариант — использовать специальные инструменты для этой задачи, например, командные инструменты MySQL. Если ваш файл представляет собой дамп SQL, попробуйте выполнить следующую команду в терминале:
mysql -u(ваше имя пользователя) -p(ваш пароль) -h(имя вашего SQL-сервера) (имя базы данных) < /путь/к/вашему/sql/дампу.sql
Если вам некомфортно работать с командной строкой, подойдут такие инструменты, как SQLYog (для Windows), Sequel Pro (для Mac) и другие, которые могут быть более подходящими для выполнения импортных операций.
Эта инструкция сработала для меня. Если вы столкнулись с ошибкой "Maximum execution time of 300 seconds exceeded" в файле DBIMysqli.class.php
, откройте следующий файл в текстовом редакторе:
C:\xampp\phpMyAdmin\libraries\config.default.php
Затем найдите следующую строку:
$cfg['ExecTimeLimit'] = 300;
И измените значение 300
на 900
.
Дополнительную информацию можно найти по этой ссылке: Surya2in1 блог.
Чтобы устранить проблему с максимальным временем выполнения скриптов в phpMyAdmin, просто установите следующее значение в файле xamp/phpMyAdmin/libraries/config.default.php
:
$cfg['ExecTimeLimit'] = 0;
Значение 0 означает, что ограничение по времени выполнения отсутствует.
Также внесите следующие изменения в файл php.ini
, чтобы настроить размер файлов:
post_max_size = 600M
upload_max_filesize = 500M
max_execution_time = 5000
max_input_time = 5000
memory_limit = 600M
Обратите внимание, что значения post_max_size
и memory_limit
должны быть больше, чем значение upload_max_filesize
.
Важно: Не забудьте перезапустить сервер после внесения изменений!
Как предотвратить SQL-инъекции в PHP?
SQL-инъекция, обхватывающая mysql_real_escape_string()
MySQL INTO OUTFILE: Как переопределить существующий файл?
java.sql.SQLException: Не найден подходящий драйвер для jdbc:mysql://localhost:3306/dbname
Какой быстрее в PHP - MySQL или MySQLi?