PHP - Traitement long sans blocage du navigateur ?

PHP - Traitement long sans blocage du navigateur ? - PHP - Programmation

Marsh Posté le 29-11-2013 à 15:14:30    

Bonjour,
 
tout d'abord je travail sur un intranet fonctionnant sous EasyPHP 5.3.2i.
 
A un moment, les utilisateurs doivent valider un traitement qui dure plus d'une minute en PHP. ce qui les bloquent et ils ne peuvent pas continuer à travailler.
 
J'ai donc eu l'idée d'effectuer ce traitement en parallèle :
1 - Au lieu d'ouvrir la page, j'ai ouvert une nouvelle fenêtre du navigateur et exécuté ce traitement dans cette nouvelle fenêtre => Rien a faire, la page principale (et tout l'intranet) reste bloqué sur le poste de l'utilisateur jusqu'à la fin du traitement.
2 - J'ai donc essayé la même méthode (ouvrir un nouvelle fenêtre) mais d'effectuer l'appel de la page a exécuter en ajax => Même problème
3 - J'y suis donc allé bourrin... J'ai fais un programme C++ qui exécute la page et les paramètres que je lui envoi, puis exécute ce programme C++ avec la commande System de PHP sur la fenêtre qui lancés ma requête ajax... => Toujours pareil ! L'exécution de ce traitement bloque les utilisateurs jusqu’à la fin ! :pt1cable:  
 
J'ai bien vérifié que ce n'était pas apache qui coincé, j'ai lancer un traitement long, et j'ai lancer un autre navigateur. Aucun blocage sur celui-ci.
 
J'aimerais que lorsque l'utilisateur valide ce qu'il a à valider, le traitement se fasse en "tache de fond" et que l'utilisateur puisse continuer à faire autre chose sur l'intranet...
 
Alors, est-ce possible d'effectuer ce genre de chose ? J'accepte toutes les méthodes ! (J'ai pensé peut être a un applet java mais je n'y connais rien)
 
Merci d'avance !

Reply

Marsh Posté le 29-11-2013 à 15:14:30   

Reply

Marsh Posté le 29-11-2013 à 23:32:01    

Possible en lancant un batch qui lance un autre batch avec "start xxxx.bat", apres il faut tester le résultat en javascript toutes les 10 secs pour voir si le travail est finit.
 

Reply

Marsh Posté le 30-11-2013 à 16:04:31    

thomas31200 a écrit :

Bonjour,

 

tout d'abord je travail sur un intranet fonctionnant sous EasyPHP 5.3.2i.

 

A un moment, les utilisateurs doivent valider un traitement qui dure plus d'une minute en PHP. ce qui les bloquent et ils ne peuvent pas continuer à travailler.

 

J'ai donc eu l'idée d'effectuer ce traitement en parallèle :
1 - Au lieu d'ouvrir la page, j'ai ouvert une nouvelle fenêtre du navigateur et exécuté ce traitement dans cette nouvelle fenêtre => Rien a faire, la page principale (et tout l'intranet) reste bloqué sur le poste de l'utilisateur jusqu'à la fin du traitement.
2 - J'ai donc essayé la même méthode (ouvrir un nouvelle fenêtre) mais d'effectuer l'appel de la page a exécuter en ajax => Même problème
3 - J'y suis donc allé bourrin... J'ai fais un programme C++ qui exécute la page et les paramètres que je lui envoi, puis exécute ce programme C++ avec la commande System de PHP sur la fenêtre qui lancés ma requête ajax... => Toujours pareil ! L'exécution de ce traitement bloque les utilisateurs jusqu’à la fin ! :pt1cable:

 

J'ai bien vérifié que ce n'était pas apache qui coincé, j'ai lancer un traitement long, et j'ai lancer un autre navigateur. Aucun blocage sur celui-ci.

 

J'aimerais que lorsque l'utilisateur valide ce qu'il a à valider, le traitement se fasse en "tache de fond" et que l'utilisateur puisse continuer à faire autre chose sur l'intranet...

 

Alors, est-ce possible d'effectuer ce genre de chose ? J'accepte toutes les méthodes ! (J'ai pensé peut être a un applet java mais je n'y connais rien)

 

Merci d'avance !

 

C'est très étrange que le 1 ne marche pas. Le problème vient probablement du navigateur ou de la structure du site ou de la façon dont sont lancés les appels AJAX.

 

Ayant l'habitude de reprendre un existant mal fichu, je propose une solution: au lieu de faire ton traitement dans traitement.php, tu  insères dans une table les paramètres d'exécution (les arguments) mais tu ne fais rien, tu réponds juste "OK".

 

Et tu fais un autre script qui tourne en permanence en tache de fond (sur ton serveur) ou est lancée en crontab (qui doit avoir un équivalent sous windows) toutes les minutes, qui va aller interroger la BDD et qui lui fera le traitement réel.

Message cité 1 fois
Message édité par philippe06 le 30-11-2013 à 16:07:19

---------------
Aimer les femmes intelligentes est un plaisir de pédéraste. (Charles Baudelaire) - Vous vulgarisez :o (Jean-Kevin Dubois)
Reply

Marsh Posté le 30-11-2013 à 18:14:32    

Suivant les navigateurs le nombre de connexions simultanées à une source similaire est limité. Mais il n'est jamais de 1, il est au minimum de 2. Il se peut que le navigateur ait une limite à 2 et que la 2è connexion soit occupée, ce qui bloque tout autre connexion au même domaine.

Reply

Marsh Posté le 01-12-2013 à 08:38:23    

thomas31200 a écrit :

Bonjour,
 
tout d'abord je travail sur un intranet fonctionnant sous EasyPHP 5.3.2i.
 
A un moment, les utilisateurs doivent valider un traitement qui dure plus d'une minute en PHP. ce qui les bloquent et ils ne peuvent pas continuer à travailler.
 
J'ai donc eu l'idée d'effectuer ce traitement en parallèle :
1 - Au lieu d'ouvrir la page, j'ai ouvert une nouvelle fenêtre du navigateur et exécuté ce traitement dans cette nouvelle fenêtre => Rien a faire, la page principale (et tout l'intranet) reste bloqué sur le poste de l'utilisateur jusqu'à la fin du traitement.
2 - J'ai donc essayé la même méthode (ouvrir un nouvelle fenêtre) mais d'effectuer l'appel de la page a exécuter en ajax => Même problème
3 - J'y suis donc allé bourrin... J'ai fais un programme C++ qui exécute la page et les paramètres que je lui envoi, puis exécute ce programme C++ avec la commande System de PHP sur la fenêtre qui lancés ma requête ajax... => Toujours pareil ! L'exécution de ce traitement bloque les utilisateurs jusqu’à la fin ! :pt1cable:  
 
J'ai bien vérifié que ce n'était pas apache qui coincé, j'ai lancer un traitement long, et j'ai lancer un autre navigateur. Aucun blocage sur celui-ci.
 
J'aimerais que lorsque l'utilisateur valide ce qu'il a à valider, le traitement se fasse en "tache de fond" et que l'utilisateur puisse continuer à faire autre chose sur l'intranet...
 
Alors, est-ce possible d'effectuer ce genre de chose ? J'accepte toutes les méthodes ! (J'ai pensé peut être a un applet java mais je n'y connais rien)
 
Merci d'avance !


Et ton code ajax il ressemble a quoi ?


---------------
Blablaté par Harko
Reply

Marsh Posté le 02-12-2013 à 09:28:12    

philippe06 a écrit :


 
C'est très étrange que le 1 ne marche pas. Le problème vient probablement du navigateur ou de la structure du site ou de la façon dont sont lancés les appels AJAX.
 
Ayant l'habitude de reprendre un existant mal fichu, je propose une solution: au lieu de faire ton traitement dans traitement.php, tu  insères dans une table les paramètres d'exécution (les arguments) mais tu ne fais rien, tu réponds juste "OK".
 
Et tu fais un autre script qui tourne en permanence en tache de fond (sur ton serveur) ou est lancée en crontab (qui doit avoir un équivalent sous windows) toutes les minutes, qui va aller interroger la BDD et qui lui fera le traitement réel.


 
J'ai eu la même idée, je ne fais plus le traitement directement. A la validation je stock donc mes argument dans une table et le responsable clic sur un bouton quand il veut tous valider (il ne voulais pas de tâche planifié toutes les X minutes...)
 
Problème réglé donc. Merci.
Mais j'aurais aimer comprendre ce blocage... Est-ce normal ?
Pour l'ajax c'est une requête asynchrone basique. (en jqerry)

Reply

Marsh Posté le 04-12-2013 à 14:02:06    

C'est censé marcher.
 

Citation :


J'ai bien vérifié que ce n'était pas apache qui coincé, j'ai lancer un traitement long, et j'ai lancer un autre navigateur. Aucun blocage sur celui-ci.  
 
J'aimerais que lorsque l'utilisateur valide ce qu'il a à valider, le traitement se fasse en "tache de fond" et que l'utilisateur puisse continuer à faire autre chose sur l'intranet...  
 
Alors, est-ce possible d'effectuer ce genre de chose ? J'accepte toutes les méthodes ! (J'ai pensé peut être a un applet java mais je n'y connais rien)  


 
Sur la même machine? Le même navigateur (la même version)?
 
Sinon:  
 
Utilises tu un proxy HTTP avec la navigateur à problèmes? Le site intranet utilise t il un mécanisme de navigation "ajax" (préchargement des pages à afficher via ajax) ?


---------------
Aimer les femmes intelligentes est un plaisir de pédéraste. (Charles Baudelaire) - Vous vulgarisez :o (Jean-Kevin Dubois)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed