|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : juillet 2006 Messages : 127 ![]() |
Bonjour à tous !
Bon je me suis pris la tête une journée sur ce problème (déjà parce qu'au début je ne comprenais pas d'où ça venait). J'ai une page qui appelle en ajax un script (disons "script1") TRES LONG (genre 10min facile). J'avais donc pensé à l'idée d'une sorte de progress bar en ajax qui permettrait à l'utilisateur de savoir où en est le traitement de la migration des données. Pour cela, dans script1 je mets à jours des variables en session, et je les récupère dans le "script2" que j'appelle toutes les secondes (donc plusieurs ajax en même temps). Le souci c'est que bien sûr j'ai fait un ptit session_start() dans chaque script, mais dans le 2ème ça foire. Jme suis dit (au bout d'un long moment de réflexion Seul souci, ces valeurs ne sont pas définies (alors qu'elles le sont, enfin bref), donc souci de session... Sauf que j'ai pas le droit de lancer session_start(). Ma solution (temporaire je l'espère !!!) est d'écrire les variables dans un fichier dans script1, et lire ce fichier dans script2 (j'espère que les "protections" de lecture se font toutes seules, car je n'en prends aucune !) Quelqu'un aurait-il la solution pour bénéficier de ces variables sans passer par un fichier ? (j'avais pensé à un tableau encore plus "global" que $_SESSION, mais pas trouvé). Je suis en PHP 4.4 je crois. Merci à vous |
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : juillet 2006 Messages : 127 ![]() |
Up !
Après plusieurs recherches j'ai trouvé qu'il était possible de modifier le gestionnaire de sessions de PHP.... 5 ! Donc inutile dans mon cas. En gros 3 solutions : - soit j'arrive à faire marcher le $_SESSION (mmmh gros doutes) - soit j'utilise un fichier en espérant qu'il ne puisse pas y avoir de pb de lecture/écriture (genre pile au moment où je le vide pour le récrire dans script1, ben paf! je le lis dans script2 - soit j'utilise la base de données (je sais même pas si je gagnerais en temps d'exécution et en sécurité, mais ça ferait des requêtes supplémentaires pour pas grand chose) Merci de votre aide |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : avril 2008 Messages : 11 ![]() |
Salut,
J'ai jamais essayer de faire se genre de chose mais c'est assez interressant. Je pense que ton idée avec les sessions devrait marcher mais la encore je ne peut rien dire dessus sans le code. Par contre sur les deux autres solutions : c'est clair qu'il vaut mieux utiliser la base : c'est plus rapide et vu le genre de script c'est important. |
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : juillet 2006 Messages : 127 ![]() |
Nan sessions j'arrive pas à les faire marcher correctement ! (et j'attends qu'un gourou de PHP donne des idées :p )
Oui je vais ptet essayer la base pour voir, en espérant que ça ralentisse pas trop le process. D'ailleurs la base ou le fichier ça part en vrille si ya plusieurs personnes qui utilisent la progress bar en même temps tiens, j'y avais pas pensé ! Nan faudrait vraiment arriver à faire marcher les sessions... Ou alors utiliser un unique id par fichier/record de base si on utilise l'une ou l'autre de ces méthodes alternatives. Gourous de PHP, pliz help |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : juillet 2006 Messages : 127 ![]() |
Bon, toujours solution temporaire : j'utilise les fichiers, dont le nom contient le session_id() fourni depuis la page HTML de "départ".
J'ai retenté d'appeler session_start() dans les deux fichiers PHP appelés en Ajax, mais rien à faire, le script2 (celui qui est rapide, lancé toutes les secondes, et qui retourne la valeur courante de la progress bar) attend bêtement que le script1 ait finit pour retourner ![]() Besoin d'un coup de main des roxxor PHP sur ce coup-là |
|
|
00
|
|
|
#6 | ||||
![]() ![]() Marc ChappuisDéveloppeur Web Inscription : décembre 2003 Messages : 1 535 ![]() |
Salut,
J'ai fait quelques test avec les sessions (d'habitude j'utilise la db pour ça) Alors ma conclusion est la suivante (si qqn peut confirmer c'est mieux) Lorsque deux requêtes provenant d'un même client appellent deux pages php différentes avec toute deux un session_start, la deuxième requête attendra que la permière aie terminé. Alors j'ai tenté le session_write_close() qui permet de sauver et fermer la session, il faut ensuite la rouvrir pour pouvoir à nouveau modifier, voici mon test: long.php Code :
Code :
Si la requête sur court.php survient quand la session est ouverte sur long.php j'ai peur qu'il y aie un temps de réponse particulièrement plus long (c'était peut-être un lag sur mon serveur durant mon test)
__________________
Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage ! |
||||
|
|
00
|
|
|
#7 | ||
|
Membre du Club
![]() Inscription : juillet 2006 Messages : 127 ![]() |
Ah, merci pour la réponse Marchal !
Alors oui en effet j'avais trouvé sur un site un exemple de session_write_close(), mais le truc c'est que ce que je comptais faire, c'est faire un peu comme tu fais toi, mais avec une sécurité supplémentaire qui justement aurait permis de bypasser le problème auquel tu fais allusion. Genre partout où toi tu mets session_start(), je voulais mettre un truc du genre : Code :
Donc ta technique est bonne, il faudrait juste trouver un moyen d'écrire cette fonction is_session_open() Si vous avez une idée.... |
||
|
|
00
|
|
|
#8 |
![]() ![]() Marc ChappuisDéveloppeur Web Inscription : décembre 2003 Messages : 1 535 ![]() |
Salut,
Tu peux utiliser des gestionnaires de session qui travaillent avec une base de donnée. Ainsi, pour savoir si la session est ouverte il s'agit d'une bête requête à la db.
__________________
Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage ! |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : juillet 2006 Messages : 127 ![]() |
Hello ami Suisse !
Ouais mais mon but c'est limiter au maximum de m'acharner sur la DB (d'où ma préférence de l'utilisation des sessions plutôt que mettre ces variables en DB) Il doit forcément y avoir un autre moyen de savoir si la session est ouverte non ? Je sais pas, un fichier dans /tmp (jdis une bêtise mais dans l'idée on se comprend), ou un test sur une variable "globale", ou.... ? |
|
|
00
|
|
|
#10 |
![]() ![]() Marc ChappuisDéveloppeur Web Inscription : décembre 2003 Messages : 1 535 ![]() |
Salut,
Oui, la présence du cookie de session et l'existance du fichier correspondant http://fr.php.net/manual/fr/function...-save-path.php Mais le problème c'est que la session peut exister en tant que fichier mais être échue (avant le nettoyage des sessions échues). Sauf erreur, le fichier de session est un hash sérialisé que tu peux lire toi même mais l'avantage du mécanisme de session est justement d'éviter que deux requêtes n'y accèdent en même temps. Si tu contourne ça alors autant revenir à ton idée de départ pour travailler avec un simple fichier en gérant toi même le vérouillage
__________________
Si ton code fait plus d'une ligne, c'est que tu as mal choisi ton langage ! |
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Inscription : juillet 2006 Messages : 127 ![]() |
Merci pour cette réponse !
Je vais considérer le sujet comme résolu, car suffisamment d'options ont été listées. Merci de ton aide, à bientôt ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com