|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : septembre 2008 Messages : 80 ![]() |
Bonjour à tous,
Pour vous placer dans le contexte je travail sur un module qui permet de créer des documents csv (excel) à partir d'une base de données, ces fichiers font plusieurs dizaines de milliers d'enregistrement. Comme vous pouvez l'imaginer le temps de chargement est plutôt long et j'aimerai créer une barre de chargement assez évoluée qui afficherai le pourcentage de tuples traités. Malheureusement je ne vois pas bien comment faire, mais voila ma première approche : 1- Le fichier de génération met à jour une variable de session dans la boucle de remplissage des fichiers 2- A partir de ma page de départ j'appelle ma page de génération en AJAX. 3- Au même moment je place un setInterval sur une autre fonction AJAX qui me ramène la valeur de la session sensée avoir été mise à jour par le serveur. L'idée est que les sessions sont stockées sur le serveur, malheureusement le résultat est un ensemble de réponses vides jusqu'à ce que la page soit chargée et donc la liste terminée. A partir de ce moment la effectivement, la session contient les dernière valeurs de bouclage... Contrairement à ce que je pensais les sessions ne sont mises à jour qu'une fois la page chargée, à mon grand regret... Du coup je vois mal comment faire pour faire communiquer le client et le serveur pendant que celui-ci réalise une action. Si vous avez des idées, je suis preneur ! Merci =) |
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Inscription : juin 2008 Messages : 105 ![]() |
Salut l'idée de stocker l'état de ta requête dans une variable de session, il fallait y penser ....
Cependant, pour que ça marche, tu devrais créer une fonction ajax qui va appeler le script php pour modifier la valeur de la variable de session. Alpha. |
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : juin 2008 Messages : 105 ![]() |
J'ai dit une bêtise dans le msg précédent. Effectivement, le code php est exécuté par le serveur en une fois.
Cependant, tu as une autre possibilité: Il s'agit de fractionner ta procédure de création de fichier, en utilisant ajax. A l'aide d'une procédure ajax, tu va chercher le nbre d'enregistrements que tu vas traiter. Ensuite, si tu veux une progression par 5%, tu crée ton document csv en 20 fois, via ajax, et tu mets à jour à chaque pas de 5% ta barre de progression. Donc si tu as 10.000 enregistrements, par ex, tu divise 10.000 par 20 cela fait 500 , et tu traites 500 enreg à la fois. Je pense que cela pourrait fonctionner. Alpha. |
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : septembre 2008 Messages : 80 ![]() |
Salut, merci pour ta réponse !
Afin de valider le fait que php, asp créent le document en une seule fois j'ai tenté de faire un transfert d'information via un simple fichier texte qui est rempli et consulté de la même façon que je l'ai fait avec ma variable de session. Suspens.... Rien n'y fait, tu as raison côté serveur le code est bien exécuté en une fois et les fichiers et variables ne sont disponibles qu'à la fin de cette exécution... Effectivement un pas de 5% me semble raisonnable, je vais fractionner de la sorte ! Merci pour l'aide ! =) |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : septembre 2008 Messages : 80 ![]() |
Nouvelle problématique,
J'ai divisé le traitement en n pas afin de permettre au serveur d'actualiser les variables de sessions qui sont récupérés par un script AJAX sous interval. Le gros problème c'est que déjà je trouve pas ça propre. Une boucle de redirection plusieurs 10ènes de fois de suite, ça fait bricolo, mais en plus Firefox et chrome empêchent de faire plus de 20 redirections et IE je crois qu'à la première ça déconne O_o' J'ai modifié la config de mon firefox pour qu'il puisse faire plus de redirection, ça marche impeccable, rien à redire. Malheureusement les personnes qui vont utiliser ce logiciel n'ont absolument aucune connaissance en informatique et je ne pense pas qu'ils aillent voir dans le about:config de firefox... La question est donc comment faire autrement? Il y a bien un moyen pour permettre au serveur de communiquer avec le client pendant un traitement quand même !!! Merci |
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : octobre 2009 Messages : 122 ![]() |
Je ne l'ai jamais fait, mais voilà une piste : utiliser Apache pour lancer une commande PHP
Ton premier appel Ajax lance un script coté serveur (ajax.php?id=123456) qui exécute en ligne de commande système un autre script (traitementServeur.php) avec un paramètre unique propre au client web (123456) qui permettra de l'identifier (je ne sais plus comment on passe des paramètres à un script en ligne de commande) php5 /var/www/[...]traitementServeur.php id=123465 etc. traitementServeur.php met à jour une entrée dans un table de BDD identifiée par l'id et contenant le pourcentage de traitement. Comme il boucle pour créer ton CSV, il le connait. Quand traitementServeur.php a fini, il flag l'enregistrement comme fini d'une manière ou d'une autre et écrit le fichier sur le disque dur ajax.php?id=123456 regarde si il existe un enregistrement dans la table en donnant son ID : si il n'y a rien, il lance le traitement, si il y a quelque-chose il prend le pourcentage et le donne au navigateur. Si l'enregistrement est flagué comme fini, il retourne une autre valeur au javascript qui modifie le DOM pour proposer le fichier au téléchargement via une 3è méthode qui cherche le fichier depuis le disque dur |
|
|
00
|
|
|
#7 | |
![]() ![]() ![]() Didier MouronvalDéveloppeur Web Inscription : juin 2008 Messages : 13 806 ![]() |
Citation:
__________________
Pas de question technique par MP ! Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi ! Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi ! Mes formations video2brain : La formation complète sur JavaScript • JavaScript et le DOM par la pratique • PHP 5 et MySQL : les fondamentaux Mon livre sur jQuery
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com