概要説明
XAMPP の phpMyAdmin で大きな SQL や CSV を取り込むと出る「Fatal error: Maximum execution time of 300 seconds」の直し方。直すのは config.inc.php の ExecTimeLimit だけで、config.default.php は直さないこと、php.ini で本当に効く値を、phpMyAdmin 5.2.1 のコードと作業環境で確かめました。
~ 目次 ~
直すのは phpMyAdmin の config.inc.php
C:\xampp\phpMyAdmin\config.inc.php
phpMyAdmin は、取り込み(インポート)や書き出しにかけてよい時間を、設定の ExecTimeLimit で決めています。決めていないときの既定は 300 秒で、これを超えると「Maximum execution time of 300 seconds」のエラーで止まります。
このサイトの作業環境(XAMPP・phpMyAdmin 5.2.1)では、上のファイルに 1 行足すだけで直りました。
phpMyAdmin の libraries/config.default.php の先頭には「DO NOT EDIT THIS FILE, EDIT config.inc.php INSTEAD」(直さずに config.inc.php を直して)と書いてあります。phpMyAdmin を入れ直すと上書きされるので、直すのは config.inc.php だけにします
phpMyAdmin 5.2 では、既定の値はコード(libraries/classes/Config/Settings.php)で決まっていて、ExecTimeLimit がないときやマイナスのときは 300 秒になります。config.inc.php に書いた値が、それより優先されます。
// 取り込み・書き出しの制限時間(秒)。0 にすると制限なし $cfg['ExecTimeLimit'] = 3600;
| 書き方 | 意味 |
|---|---|
| $cfg[‘ExecTimeLimit’] = 3600; | 1 時間まで待つ |
| $cfg[‘ExecTimeLimit’] = 0; | 制限なし(作業環境だけで使う) |
| $cfg[‘Servers’][$i][‘ExecTimeLimit’] | サーバーごとの設定ではないので、ここに書いても効かない |
config.inc.php は PHP のファイルなので、保存すれば次に phpMyAdmin を開いたときから効きます。
php.ini で見ておく値
phpMyAdmin は、取り込みを始めるときに、PHP の制限時間を ExecTimeLimit の秒数で上書きします(コードの Util.php で set_time_limit() を呼んでいる)。そのため、php.ini の max_execution_time を合わせなくても、取り込みは止まりません。
php.ini で効いてくるのは、上げるファイルの大きさとメモリです。
upload_max_filesize = 256M post_max_size = 256M memory_limit = 512M
| 設定 | 役目 |
|---|---|
| upload_max_filesize | 上げられるファイル 1 つの大きさの上限 |
| post_max_size | 送る中身ぜんぶの大きさの上限。upload_max_filesize 以上にする |
| memory_limit | PHP が使ってよいメモリ |
このサイトの作業環境の php.ini を見ると、upload_max_filesize は 200M でしたが、post_max_size が 100M でした。この場合、実際に上げられるのは 100M までです。2 つを同じ大きさにそろえておくと迷いません。
設定を変えたら Apache を再起動
php.ini を直したあとは、XAMPP のコントロールパネルで Apache を止めて(Stop)、もう一度動かす(Start)と反映されます。config.inc.php だけを直したときは、再起動は要りません。
phpMyAdmin から CSV を取り込んでテーブルを作る
上の設定のあと、作りたいテーブルの名前を入れて実行すると、CSV の中身をそのままテーブルに取り込めます。SQL の形でないデータを入れたいときに便利です。
とても大きな SQL はコマンドで取り込む
数百 MB を超えるような SQL は、phpMyAdmin を通さず、XAMPP に入っている mysql のコマンドで取り込むほうが速く、時間やファイルの大きさの制限も受けません。
C:\xampp\mysql\bin\mysql.exe -u root -p データベース名 < C:\作業\dump.sql


