Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1304 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  PHP - Traitement long sans blocage du navigateur ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP - Traitement long sans blocage du navigateur ?

n°2212184
thomas3120​0
Posté le 29-11-2013 à 15:14:30  profilanswer
 

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 !

mood
Publicité
Posté le 29-11-2013 à 15:14:30  profilanswer
 

n°2212252
GordonF_69
Posté le 29-11-2013 à 23:32:01  profilanswer
 

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.
 

n°2212261
philippe06
Posté le 30-11-2013 à 16:04:31  profilanswer
 

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)
n°2212264
czh
Posté le 30-11-2013 à 18:14:32  profilanswer
 

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.

n°2212284
gatsu35
Blablaté par Harko
Posté le 01-12-2013 à 08:38:23  profilanswer
 

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
n°2212342
thomas3120​0
Posté le 02-12-2013 à 09:28:12  profilanswer
 

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)

n°2212589
philippe06
Posté le 04-12-2013 à 14:02:06  profilanswer
 

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)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  PHP - Traitement long sans blocage du navigateur ?

 

Sujets relatifs
Projet de fin d'année. (Java,Html,MySQL,PHP)Récupération données d'un site PHP
Quoi modifier du PHP.INI pour remettre mon blog sur piedPHP /flash demandes =)
Du PHP compilé, çà existe ?OVH Mutualisé et traitement long
Champs input vers Array PHPHelp [PHP/MySQL] et programmation de jeu
Plus de sujets relatifs à : PHP - Traitement long sans blocage du navigateur ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR