phpMyAdmin を使用して大規模なデータベースをエクスポートしようとしています。最大実行時間の 600 秒に達したため (またはそのようなもの)、スクリプトが停止したというエラーが表示されます。0と-1に設定max_execution_time
してみました。php.ini
で確認できるように、変更は有効にphpinfo()
なりますが、まだエラーが発生します。もう1つの奇妙なことは、もともと(0に変更する前に)600でもなかったことです。180でした!この 600 セットはどこにありますか?
3 に答える
手動でどこかに設定されているかどうかを確認してください。UNIX タイプのプラットフォームを使用していると仮定すると、次のようになります。
find /path/to/root/of/phpmyadmin -name "*.php" -print0 | xargs -0 grep "max_execution_time"
Web サーバーには、PHP の実行を中断する可能性のある他のタイムアウト構成がある場合があります。Apache には Timeout ディレクティブがあり、IIS には CGI タイムアウト機能があります。具体的な詳細については、Web サーバーのドキュメントを参照してください。
phpMyAdmin を使用して大きなファイルをインポートしないでください。mysql CLI を使用して、DB のダンプをインポートしてみてください。SQL ファイルをサーバーに転送し、shell_exec や system などの PHP スクリプトを使用して、サーバー上で次のコマンドを実行します。
mysql --user=user --password=password データベース < database_dump.sql.
もちろん、データベースが存在している必要があり、提供するユーザーはデータベースを更新するために必要な権限を持っている必要があります。
PHP はデフォルトで、次の 3 つのディレクティブを使用してすべての php スクリプトにリソース制限を設定します: => max_execution_time
: 各スクリプトの最大実行時間 (秒単位) (デフォルトは 30 秒)
=> max_input_time
: 各スクリプトがリクエスト データの解析に費やす最大時間 (60 秒)
=> memory_limit
: スクリプトが消費できるメモリの最大量 (デフォルト 8MB)
リソースの制限が原因で、php スクリプトがタイムアウトした可能性があります。スクリプトが実行されるように、新しいリソース制限を設定するだけです。
それもうまくいかない場合はset_time_limit(N)
、時間制限を秒単位で設定する関数で設定できます。