|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : janvier 2009 Messages : 36 ![]() |
Bonjour à tous.
Je suis en train de réaliser un outil en php mysql. Je suis face au problème suivant : j'ai un appel d'une page PHP (appel effectué via AJAX en asynchrone) qui effectue un très longue requête (plus d'une minute). J'aimerais que si l'utilisateur le souhaite, il puisse interrompre l'exécution de cette requête via un autre appel Ajax. Pour l'instant la solution implémentée est la suivante (en pseudo code * Appel du premier script php via AJAX. Le script effectue: - SELECT connection_id() AS connection_id - enregistrement de connection_id dans la SESSION - grosse requête qui prend longtemps * Instant donné, l'utilisateur clique sur un bouton qui lance un appel via AJAX du deuxième script. Le script effectue - récupération de la variable $connection_id dans la session - KILL QUERY $connection_id Le problème est que le deuxième script attends toujours la fin du premier script pour être exécuté. J'ai inséré des instructions de reporting (error_log) et me suis aperçu que tant que le premier script n'a pas terminé sa requête, alors le deuxième script ne s'exécute pas. J'aimerais savoir comment puis-je régler ce problème (peut-être ma solution n'est pas la bonne) Une chose cepandant: lorsque j'interromps ma requête à l'aide d'un outil client sql (donc sans passer par un script php) alors la pas de soucis... Merci de votre lecture Guillaume |
|
|
00
|
|
|
#2 |
|
Membre à l'essai
![]() Inscription : janvier 2009 Messages : 36 ![]() |
Bon en fait un mec m'a donné une info hyper interéssante : une session sur php est verrouillée. Donc dans mon cas le blocage était pas au niveau de la base de données ou même de AJAX, comme j'avais pu le penser au début. Non le problème venait juste de l'accès à la variable $_SESSION qui était verrouillée par le premier script.
|
|
|
00
|
|
|
#3 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
tu as une réponse de se coté :
http://mysql.ifrance.com/showthread.php?t=60 tu récupère l'id de la grosse requete, et si tu veux annuler la requete tu ouvre une nouvelle connexion à partir d'un lien ou un bouton et tu 'KILL' la grosse requete dont tu as récupérer l'id... jamais essayé mais tiens moi au courant du résultat...
__________________
Développeur informatique contrarié... |
|
|
00
|
|
|
#4 | |
|
Membre à l'essai
![]() Inscription : janvier 2009 Messages : 36 ![]() |
Citation:
Donc OUI cela fonctionne parfaitement. Le problème que j'ai eu c'est une histoire de blocage de session PHP. En effet, j'utilise la session pour placer le premier identifiant de requête (la requête longue). Ensuite le deuxième appel va lire dans la session pour connaitre cet identifiant et lancer le KILL. Sauf que : la session est toujours verrouillée par le premier thread php. Il faut juste ajouter un "session_write_close()" dans le premier thread dès que possible pour que la session soit libéré et accessible par le second appel php. En espérant avoir été clair ![]() Guillaume. |
|
|
|
00
|
|
|
#5 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
autant pour moi...
c'est bon à savoir
__________________
Développeur informatique contrarié... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com