PHP et SQL - coupure possible d'une requête SQL ?
Le
Denis Beauregard
Bonjour,
J'utilise EasyPHP pour traiter une grosse base de données (autour
de 200 000 enregistrements).
Pour une raison pratique, j'ai conservé la limite par défaut de 30
secondes pour l'exécution d'un script PHP. En gros, durant le
développement, j'aime voir ce qui sort du script. De plus, je
suppose que peu importe la limite, je finirai par l'atteindre sans
m'en apercevoir. Peu importe la raison, j'ai cette limite de 30
secondes par script.
Jusqu'à présent, je traite un certain nombre de lignes, en
conservant un pointeur vers la dernière ligne traitée, puis je
recommence où je suis rendu. Pour être certain de ne rien
perdre, je permets de doubler le dernier enregistrement ajouté
à la base de données transformées. Par exemple, j'ai ajouté
"ON DUPLICATE KEY UPDATE" à ces requêtes mySQL.
À tous les 30 secondes, il y a un message d'erreur et je vois la
ligne du script PHP où l'erreur est survenue (où le 30 secondes
a été atteint). Je n'ai jamais vu de ligne SQL, seulement PHP.
Ma question : est-ce que le 30 secondes est limité au script PHP
et donc si je place un énonce SQL long (comme plusieurs insertions
ou un tri), est-ce que l'énoncé SQL peut planter ?
Denis
J'utilise EasyPHP pour traiter une grosse base de données (autour
de 200 000 enregistrements).
Pour une raison pratique, j'ai conservé la limite par défaut de 30
secondes pour l'exécution d'un script PHP. En gros, durant le
développement, j'aime voir ce qui sort du script. De plus, je
suppose que peu importe la limite, je finirai par l'atteindre sans
m'en apercevoir. Peu importe la raison, j'ai cette limite de 30
secondes par script.
Jusqu'à présent, je traite un certain nombre de lignes, en
conservant un pointeur vers la dernière ligne traitée, puis je
recommence où je suis rendu. Pour être certain de ne rien
perdre, je permets de doubler le dernier enregistrement ajouté
à la base de données transformées. Par exemple, j'ai ajouté
"ON DUPLICATE KEY UPDATE" à ces requêtes mySQL.
À tous les 30 secondes, il y a un message d'erreur et je vois la
ligne du script PHP où l'erreur est survenue (où le 30 secondes
a été atteint). Je n'ai jamais vu de ligne SQL, seulement PHP.
Ma question : est-ce que le 30 secondes est limité au script PHP
et donc si je place un énonce SQL long (comme plusieurs insertions
ou un tri), est-ce que l'énoncé SQL peut planter ?
Denis

Poser une question


configuration max_execution_time de php.ini.
jacfev.
Le 20/01/2012 17:21, Denis Beauregard a écrit :
Bonsoir,
Si j'ai bien compris ta question, voir la deuxième note sur ce lien :
http://fr2.php.net/manual/fr/functi...-limit.php
--
Cordialement,
Pascal
Je ne réponds pas directement à ta question (comme les autres d'ailleurs
!). Mais j'ai eu le même problème que toi par le passé.
Un conseil : teste dans ta boucle le temps écoulé depuis le début du
script (avec la fonction time ou microtime) afin d'arrêter ton
traitement avant la "mort" du processus PHP (par exemple au bout de 25
secondes si ta limite est à 30 secondes). Comme ça, ça t'évitera d'être
dans un état "indéterminé" lorsque ton script s'arrêtera.
Ensuite, utilise une redirection vers la même page avec la balise <meta
http-equiv="refresh"> et comme paramètre le dernier enregistrement
traité pour relancer automatiquement le script et continuer là où il
s'était arrêté.
J'espère que ça t'aidera...
--
Fredchou
mailto:
Comme indiqué dans mon message, je connais ce truc qui ne résoud
pas mon problème...
Si j'ai conservé cette limite, c'est que je sais comment la changer.
Denis
Merci du truc. Oui, c'est une bonne idée et je vais explorer cette
piste.
En passant, j'utilisais déjà la meta suggérée. Le hic est bien sûr que
le script pourrait se terminer au mauvais moment.
Denis