web-dev-qa-db-fra.com

PHP: durée d'exécution maximale lors de l'importation de fichier de données .SQL

J'essaie d'importer un fichier de données .sql volumineux à l'aide de phpMyAdmin dans XAMPP. Cependant, cela prend beaucoup de temps et je continue à obtenir:

Erreur fatale: le temps d'exécution maximal de 300 secondes a été dépassé dans C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php à la ligne 285

Et le fichier contient environ 1,2 million de lignes.

Le fichier fait environ 30 Mo. Ce n’est donc pas si gros. Je ne comprends pas vraiment pourquoi cela prend si longtemps.

;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time=30000

; Maximum amount of time each script may spend parsing request data. It's a good
; idea to limit this time on productions servers in order to eliminate unexpectedly
; long running scripts.
; Note: This directive is hardcoded to -1 for the CLI SAPI
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
; http://php.net/max-input-time
max_input_time=60

; Maximum input variable nesting level
; http://php.net/max-input-nesting-level
;max_input_nesting_level = 64

; How many GET/POST/COOKIE input variables may be accepted
; max_input_vars = 1000

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit=200M

Le est le fichier de configuration pour php.ini dans xampp, pour une raison quelconque je reçois toujours 

Erreur fatale: le temps d'exécution maximal de 300 secondes a été dépassé dans C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php à la ligne 285.

28
EssexPN

Il existe une variable de configuration dans le répertoire phpMyAdmin que vous pouvez trouver dans libraries\config.default.php appelée $cfg['ExecTimeLimit'] et que vous pouvez définir avec le temps d'exécution maximum dont vous avez besoin.

43
Randell

Eh bien, pour vous en débarrasser, vous devez définir la variable phpMyadmin sur 0 (nombre illimité) ou sur la valeur en secondes que vous jugerez appropriée pour vos besoins. Ou vous pouvez toujours utiliser CLI (interface de ligne de commande) pour ne pas avoir de telles erreurs (pour lesquelles vous voudriez jeter un coup d'œil à ce lien .

Maintenant, à propos de l'erreur, tout d'abord du côté sûr, assurez-vous que vous avez défini les paramètres PHP correctement pour pouvoir télécharger des fichiers volumineux et utiliser le temps d'exécution maximal à partir de cette fin. Sinon, continuez et définissez ci-dessous trois paramètres du fichier php.ini,

  1. max_execution_time = 3000000 (à définir selon votre req)
  2. post_max_size = 4096M
  3. upload_max_filesize = 4096M

Une fois que cela est fait, revenez à la recherche du fichier de configuration phpMyadmin portant le nom "config.default.php". Sous XAMPP, vous le trouverez dans le dossier "C:\xampp\phpMyAdmin\libraries". Ouvrez le fichier appelé config.default.php et définissez:

$cfg['ExecTimeLimit'] = 0;

Une fois défini, redémarrez MySQL et Apache et importez votre base de données.

Prendre plaisir... :)

19
Umesh Patil

Vous essayez d'importer un énorme ensemble de données via une interface Web. 

Par défaut, les scripts PHP exécutés dans le contexte d'un serveur Web ont une durée maximale d'exécution car vous ne voulez pas qu'un seul script PHP errant connecte l'ensemble du serveur et provoque un déni de service. 

Pour cette raison, votre importation échoue. PHPMyAdmin est une application Web et respecte la limite imposée par PHP. 

Vous pouvez essayer d'augmenter la limite, mais cette limite existe pour une bonne raison, donc ce n'est pas recommandé. L'exécution d'un script très long sur un serveur Web est une très mauvaise idée. 

PHPMyAdmin n'est pas vraiment destiné aux travaux difficiles comme celui-ci, il est destiné aux tâches ménagères quotidiennes et au dépannage. 

Votre meilleure option consiste à utiliser les outils appropriés pour le travail, tels que les outils en ligne de commande mysql. En supposant que votre fichier est une image SQL, vous pouvez alors essayer d'exécuter ce qui suit à partir de la ligne de commande:

mysql -u(your user name here) -p(your password here) -h(your sql server name here) (db name here) < /path/to/your/sql/dump.sql

Ou si vous n'êtes pas à l'aise avec les outils de ligne de commande, alors quelque chose comme SQLYog (pour Windows), Sequel Pro (pour Mac), etc. peut être plus approprié pour exécuter un travail d'importation.

5
GordonM

Cela a fonctionné pour moi . Si vous avez dépassé le temps d'exécution maximal 300 dans le fichier DBIMysqli.class.php. Ouvrez le fichier suivant dans l'éditeur de texte C:\xampp\phpMyAdmin\libraries\config.default.php thensearch la ligne de code suivante:

$cfg[‘ExecTimeLimit’] = 300;

et remplacez la valeur 300 par 900.

https://surya2in1.wordpress.com/2015/07/28/fatal-error-maximum-execution-time-of-300-seconds-exceeded/

4
William

Est-ce un fichier .sql ou est-il compressé (.Zip, .gz, etc.)? Les formats compressés nécessitent parfois plus de ressources PHP. Vous pouvez donc essayer de les décompresser avant de les télécharger.

Cependant, il existe d'autres méthodes que vous pouvez également essayer. Si vous avez un accès en ligne de commande, téléchargez simplement le fichier et importez-le avec le client en ligne de commande mysql (une fois à l'invite mysql>, use databasename; puis source file.sql).

Sinon, vous pouvez utiliser la fonctionnalité "UploadDir" de phpMyAdmin pour placer le fichier sur le serveur et le faire apparaître dans phpMyAdmin sans avoir à le télécharger également à partir de votre ordinateur local.

Ce lien contient des informations sur l'utilisation de UploadDir et celui-ci contient d'autres astuces et méthodes.

1
Isaac Bennetch

Après avoir essayé beaucoup de choses sans succès, j'ai réussi à obtenir un accès SSH sur le serveur et à importer ma base de données de 80 Mo avec une ligne de commande, au lieu de phpMyAdmin. Voici la commande:

mysql -u root -p -D mydatabase -o < mydatabase.sql

Il est beaucoup plus facile d'importer de grandes bases de données. Si vous exécutez xammp sous Windows, le chemin d'accès à mysql.exe est C:\xampp\mysql\bin\mysql.exe

0
Toni Almeida