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

  FORUM HardWare.fr
  Programmation
  PHP

  forcer execution script PHP ou empecher fermeture fenetre?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

forcer execution script PHP ou empecher fermeture fenetre?

n°542318
saxgard
Posté le 17-10-2003 à 14:00:49  profilanswer
 

Voila
 
lorsqu'un uilisateur ouvre une page , j'execute des operations importantes en PHP et il me semble que si l'utilisateur ferme la page alors que l'execution de celle ci n'est pas fini  alors l'execution s'arrete la ou ele en était  , non?
 
hors moi j'aimerai forcé l'execution des intructions intégré dans cet page  , enfin trouvé un moeyn que l'execution ne soit pas coupé en cours.
 
merci d'avance.


Message édité par saxgard le 17-10-2003 à 14:54:43
mood
Publicité
Posté le 17-10-2003 à 14:00:49  profilanswer
 

n°542320
saxgard
Posté le 17-10-2003 à 14:03:43  profilanswer
 

oua lors empecher de fermer la fenetre tant que les données de la fenetre ne ce sont pas affiché entièrement et qu'il n'a pas cliqué sur un bouton "fermé"

n°542394
saxgard
Posté le 17-10-2003 à 15:32:09  profilanswer
 

Pour plus d'info  , mon problème:
 
Certain utilisateurs de l'entreprise valideont des produits sur l'intranet , mais si il ferme la fenetre avant que le cahregement soit terminé , l'ajout des produits  , et les differentes etapes risuqes de se faire a moitié . Ce qui peut etre un tres gros pb.
 
Je veuxtrouvé un moyen pour que tout soit fait dès que l'on clique sur le bouton ajouté.
 
soit en demandnat au PHP de continuer meme si la fenetre est fermé  , sois en empechnat la fermeture de la fenetre.
 
Si vous avez une autre idée n'hésitez pas
merci

n°542414
impulse
Posté le 17-10-2003 à 15:45:31  profilanswer
 

En fait tu devrais rediriger l'utilisateur sur une page de confirmation quand ton operation est finie comme ça il n'y a plus de pb. Il suffit d'indiquer que tant que la page de validation n'est pas affichée l'utilisateur ne doit pas fermer le browser. Tu peux aussi utiliser des transactions si tes données sont stockées dans une BD pour eviter de mettre a jour ta BD quand le script ne se termine pas correctement.

n°542423
saxgard
Posté le 17-10-2003 à 15:51:29  profilanswer
 

impulse a écrit :

En fait tu devrais rediriger l'utilisateur sur une page de confirmation quand ton operation est finie comme ça il n'y a plus de pb. Il suffit d'indiquer que tant que la page de validation n'est pas affichée l'utilisateur ne doit pas fermer le browser. Tu peux aussi utiliser des transactions si tes données sont stockées dans une BD pour eviter de mettre a jour ta BD quand le script ne se termine pas correctement.


 
l'idée d'indiquer aux utilisateurs de ne pas fermé la fenetre tant que l'execution n'est pas terminé n'est pas possible  , car il y a aura toujours des personnes qui fermeront quand meme , sans faire expres ou non ;o)
Meme si l'utilisateur confirme il devra quand meme a un moment donné allé sur une page qui execute du PHP etsuavegarde dans des bases et donc il y a toujours le meme probleme non?
 
c'est quoi cette histoire de transaction? tu appelles quoi par transaction?
meme si je crée des tables temporaires , il y a aura toujours un moment ou il faudra copier les enregistrement dasn les vrais tables et donc : execution d'une page et donc risuqe d'etre fermé ;o)
 
mais peut etre que j'ai mal compris


Message édité par saxgard le 17-10-2003 à 15:52:10
n°542433
Mara's dad
Yes I can !
Posté le 17-10-2003 à 16:01:51  profilanswer
 

Saxgard a écrit :

Voila
 
lorsqu'un uilisateur ouvre une page , j'execute des operations importantes en PHP et il me semble que si l'utilisateur ferme la page alors que l'execution de celle ci n'est pas fini  alors l'execution s'arrete la ou ele en était  , non?


 
Oui/Non ! (par défaut, c'est Oui...)
 
C'est à toi de choisir : http://fr.php.net/manual/fr/featur [...] ndling.php


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°542434
impulse
Posté le 17-10-2003 à 16:02:28  profilanswer
 

Citation :

l'idée d'indiquer aux utilisateurs de ne pas fermé la fenetre tant que l'execution n'est pas terminé n'est pas possible  , car il y a aura toujours des personnes qui fermeront quand meme , sans faire expres ou non ;o)
Meme si l'utilisateur confirme il devra quand meme a un moment donné allé sur une page qui execute du PHP etsuavegarde dans des bases et donc il y a toujours le meme probleme non?
 
c'est quoi cette histoire de transaction? tu appelles quoi par transaction?
meme si je crée des tables temporaires , il y a aura toujours un moment ou il faudra copier les enregistrement dasn les vrais tables et donc : execution d'une page et donc risuqe d'etre fermé ;o)
 
mais peut etre que j'ai mal compris


 
Tu as le meme probleme sur n'importe quel site de vente en ligne si l'utilisateur ferme la fenetre pendant que le site est en train de joindre la banque par exemple. Si les differentes etapes sont clairement indiquées et que l'utilisateur a un QI normal ça ne devrait pas poser de probleme. De toute façon tu pourras pas empecher un utilisateur de fermer l'appli si il/elle veut absolument le faire : au pire il pourra tirer le cable d'alim du PC. :D
 
Pour les transactions je te laisse lire la doc de MySQL par exemple => http://www.mysql.com/doc/en/Transa [...] mands.html

n°542437
saxgard
Posté le 17-10-2003 à 16:03:55  profilanswer
 

Mara's dad a écrit :


 
Oui/Non ! (par défaut, c'est Oui...)
 
C'est à toi de choisir : http://fr.php.net/manual/fr/featur [...] ndling.php


 
je te remercie  , ca me parait tres intressant.

n°542438
saxgard
Posté le 17-10-2003 à 16:04:40  profilanswer
 

impulse a écrit :

Citation :

l'idée d'indiquer aux utilisateurs de ne pas fermé la fenetre tant que l'execution n'est pas terminé n'est pas possible  , car il y a aura toujours des personnes qui fermeront quand meme , sans faire expres ou non ;o)
Meme si l'utilisateur confirme il devra quand meme a un moment donné allé sur une page qui execute du PHP etsuavegarde dans des bases et donc il y a toujours le meme probleme non?
 
c'est quoi cette histoire de transaction? tu appelles quoi par transaction?
meme si je crée des tables temporaires , il y a aura toujours un moment ou il faudra copier les enregistrement dasn les vrais tables et donc : execution d'une page et donc risuqe d'etre fermé ;o)
 
mais peut etre que j'ai mal compris


 
Tu as le meme probleme sur n'importe quel site de vente en ligne si l'utilisateur ferme la fenetre pendant que le site est en train de joindre la banque par exemple. Si les differentes etapes sont clairement indiquées et que l'utilisateur a un QI normal ça ne devrait pas poser de probleme. De toute façon tu pourras pas empecher un utilisateur de fermer l'appli si il/elle veut absolument le faire : au pire il pourra tirer le cable d'alim du PC. :D
 
Pour les transactions je te laisse lire la doc de MySQL par exemple => http://www.mysql.com/doc/en/Transa [...] mands.html


 
merci merci  ;o)

n°542439
impulse
Posté le 17-10-2003 à 16:05:18  profilanswer
 

Citation :

Oui/Non ! (par défaut, c'est Oui...)
 
C'est à toi de choisir : http://fr.php.net/manual/fr/featur [...] ndling.php


 
Ah oui, c'est pas mal ça tiens. Enfin bon, il vaut mieux eduquer les utilisateurs pour qu'ils utilisent l'appli correctement plutot que d'avoir recours a cette solution "extreme".

mood
Publicité
Posté le 17-10-2003 à 16:05:18  profilanswer
 

n°542441
Mara's dad
Yes I can !
Posté le 17-10-2003 à 16:07:24  profilanswer
 

Y'a aussi des modems qui coupent la com, ou des pannes de courrant... Si c'est possible, çà arrivera, et si c'est impossible çà arrivera quand même. Donc faut le gérer :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°542445
Mara's dad
Yes I can !
Posté le 17-10-2003 à 16:09:57  profilanswer
 

impulse a écrit :

cette solution "extreme".


 
C'est pas extrème.
Si ton appli en a besoin, y'a pas de problème...
Faut juste vérifier que le client est toujours là avant de faire un echo()... Ou bien utiliser la bufferisation en sortie.


Message édité par Mara's dad le 17-10-2003 à 16:10:36

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°542446
saxgard
Posté le 17-10-2003 à 16:10:32  profilanswer
 

impulse a écrit :

Citation :

Oui/Non ! (par défaut, c'est Oui...)
 
C'est à toi de choisir : http://fr.php.net/manual/fr/featur [...] ndling.php


 
Ah oui, c'est pas mal ça tiens. Enfin bon, il vaut mieux eduquer les utilisateurs pour qu'ils utilisent l'appli correctement plutot que d'avoir recours a cette solution "extreme".


 
oauis mais malheuresement il ya des utilisateurs qui n'aime pas l'informatique , etc.. et qui sont pas tres malin et qui saves meme pas lire  ou faire les choses dans l'ordre  :D  
Puis mon chef veut que je prevoit tt se qui est possible de prévoire  :)

n°542461
saxgard
Posté le 17-10-2003 à 16:26:13  profilanswer
 

impulse a écrit :

Citation :

l'idée d'indiquer aux utilisateurs de ne pas fermé la fenetre tant que l'execution n'est pas terminé n'est pas possible  , car il y a aura toujours des personnes qui fermeront quand meme , sans faire expres ou non ;o)
Meme si l'utilisateur confirme il devra quand meme a un moment donné allé sur une page qui execute du PHP etsuavegarde dans des bases et donc il y a toujours le meme probleme non?
 
c'est quoi cette histoire de transaction? tu appelles quoi par transaction?
meme si je crée des tables temporaires , il y a aura toujours un moment ou il faudra copier les enregistrement dasn les vrais tables et donc : execution d'une page et donc risuqe d'etre fermé ;o)
 
mais peut etre que j'ai mal compris


 
Tu as le meme probleme sur n'importe quel site de vente en ligne si l'utilisateur ferme la fenetre pendant que le site est en train de joindre la banque par exemple. Si les differentes etapes sont clairement indiquées et que l'utilisateur a un QI normal ça ne devrait pas poser de probleme. De toute façon tu pourras pas empecher un utilisateur de fermer l'appli si il/elle veut absolument le faire : au pire il pourra tirer le cable d'alim du PC. :D
 
Pour les transactions je te laisse lire la doc de MySQL par exemple => http://www.mysql.com/doc/en/Transa [...] mands.html


 
je vient d'aller voir pour les transactions. ca al'air excelent mais la pour l'instant je travail avec un MySql plus vieux que la version 4 et donc ca ne prend pas en compte les transactions (et c'ets bien dommmage)
 
c'est quoi ces tables de type innoDB?

n°542498
saxgard
Posté le 17-10-2003 à 16:58:00  profilanswer
 

si je met ca  :
 

Code :
  1. set_time_limit(60);
  2.    ignore_user_abort(1);


 
au debut de mon code , je ne risuqe pas de me retrouver un serveur bloquer par une mauvaise boucle infini?  
 
j'aurais bine mon script PHP qui continuera meme si onferme la fenetre mais qui s'arretera au bout de 60s d'activité?
 
Parceque j'aimerai pouvoir empecher le blocage des serveurs a cause d'une mauvaise boucle ou requete  ;o)

n°542499
Mara's dad
Yes I can !
Posté le 17-10-2003 à 17:00:56  profilanswer
 

C'est bon.
 
T'as essayé la déconnexion ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°542503
saxgard
Posté le 17-10-2003 à 17:05:20  profilanswer
 

Mara's dad a écrit :

C'est bon.
 
T'as essayé la déconnexion ?


 
euh non  ;o)
 
mais comment ca marche  

Code :
  1. int register_shutdown_function ( string func)


 
je n'ai pas bien compris l'idée de base de cette fonction ;o)
 
PS : je suis vraiment degue  pour les transactions ca avait l'air vraiment quelquechose de bien   :(  , c'est uen bonne sécurité
 
 

n°542639
Mara's dad
Yes I can !
Posté le 17-10-2003 à 21:19:39  profilanswer
 

Yes, mais bon, quand on choisi MySql, on le fait quand même en sachant que c'est pas Oracle  :heink:  
Enfin normalement...


Message édité par Mara's dad le 17-10-2003 à 21:20:37

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°542666
Mara's dad
Yes I can !
Posté le 17-10-2003 à 22:00:31  profilanswer
 

register_shutdown_function( string func )
 
Cette fonction te permet de demander à PHP d'éxécuter une fonction à toi quand le script normal est terminé.
Ca permet par exemple de mette à jour des stats, fermer des fichiers, des bases de données...
Dans cette fonction, tu ne peux plus envoyer d'info au client car le canal est fermé.
 
En fait, c'est quasi jamais utilisé.
 
Cet que tu peux faire pour tester que ton script continue à tourner après la déconnexion de l'utilisateur, c'est un truc du genre :
 
 

Code :
  1. <?php
  2. set_time_limit(6); 
  3. ignore_user_abort( true );
  4. $f = fopen( 'test.txt', 'w' );
  5. while( ! connection_aborted() )
  6. {
  7. echo("Test coupure connexion<br>" );
  8.     fwrite( $f, "Connexion ouverte\r\n" );
  9.     for( $i=0; $i < 10000; $i++ )
  10.     {
  11.      $j = sqrt( $i );
  12.     }
  13. }
  14. fwrite( $f, "Connexion fermée !\r\n" );
  15. fclose( $f );
  16. ?>


 
Tu appelles cette page, et tu ferme vite la fenêtre.
 
Ensuite, tu fais pointer ton buttineur sur test.txt
 
Si la dernière ligne est : 'Connexion fermée !', c'est que çà marche.
Si çà marche pas, la dernière ligne est : 'Connexion ouverte'.
 
Chez moi, çà marche !
 
Attention, ferme très vite ton buttineur, ou clic sur stop, sinon, le ficher test.txt devient très très vite ENORME :D
La boucle for sert à ralentir le script, mais bon c'est juste un exemple...
 
Attention, le script ne détecte la coupure de connexion que si tu essaye d'envoyer quelque-cose au client.
Si tu enlève la ligne echo("Test coupure connexion<br>" ); ton script ne verra rien :/
 
Bref, en fait c'est pas évident à utiliser ce truc...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°542683
omega2
Posté le 17-10-2003 à 22:29:38  profilanswer
 

De deux chôse l'une :
ou tout est fait en une seule étape (une seule page web avant confirmation finale) et a ce moment là, on s'en fout que l'utilisateur ai fermé son navigateur vu que le script continuera a être exécuter comme d'habitude.
ou c'est fait en plusieurs étapes et là, les transactions au niveau base de donnée ne serviront à rien.

n°544569
saxgard
Posté le 20-10-2003 à 09:23:35  profilanswer
 

je vous remercie

n°2061026
Lobor
Posté le 03-03-2011 à 20:07:37  profilanswer
 

Mara's dad a écrit :

register_shutdown_function( string func )
 
Cette fonction te permet de demander à PHP d'éxécuter une fonction à toi quand le script normal est terminé.
Ca permet par exemple de mette à jour des stats, fermer des fichiers, des bases de données...
Dans cette fonction, tu ne peux plus envoyer d'info au client car le canal est fermé.
 
En fait, c'est quasi jamais utilisé.
 
Cet que tu peux faire pour tester que ton script continue à tourner après la déconnexion de l'utilisateur, c'est un truc du genre :
 
 

Code :
  1. <?php
  2. set_time_limit(6); 
  3. ignore_user_abort( true );
  4. $f = fopen( 'test.txt', 'w' );
  5. while( ! connection_aborted() )
  6. {
  7. echo("Test coupure connexion<br>" );
  8.     fwrite( $f, "Connexion ouverte\r\n" );
  9.     for( $i=0; $i < 10000; $i++ )
  10.     {
  11.      $j = sqrt( $i );
  12.     }
  13. }
  14. fwrite( $f, "Connexion fermée !\r\n" );
  15. fclose( $f );
  16. ?>


 
Tu appelles cette page, et tu ferme vite la fenêtre.
 
Ensuite, tu fais pointer ton buttineur sur test.txt
 
Si la dernière ligne est : 'Connexion fermée !', c'est que çà marche.
Si çà marche pas, la dernière ligne est : 'Connexion ouverte'.
 
Chez moi, çà marche !
 
Attention, ferme très vite ton buttineur, ou clic sur stop, sinon, le ficher test.txt devient très très vite ENORME :D
La boucle for sert à ralentir le script, mais bon c'est juste un exemple...
 
Attention, le script ne détecte la coupure de connexion que si tu essaye d'envoyer quelque-cose au client.
Si tu enlève la ligne echo("Test coupure connexion<br>" ); ton script ne verra rien :/
 
Bref, en fait c'est pas évident à utiliser ce truc...


 
Ca à l'air vraiment très puissant, Je dis bravo et je vais tester de ce pas.

mood
Publicité
Posté le   profilanswer
 


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

  forcer execution script PHP ou empecher fermeture fenetre?

 

Sujets relatifs
[ PHP / MySQL ] requête de base ; résultat bizarre ...[HTML/PHP] petit problème d'accent
Bug avec les formulaires (POST), PHP et XHTML strict.[PHP/MySQL] Fichiers Texte ou Base de données ?
dev PHP en local et dB MySQL sur free[PHP] Date moins une semaine
empecher l'affichage du code sourceFermer une fenetre IE ?
Empêcher de cliquer tro souvent[PHP/MySQL] Dilemne : stockage en base du texte au format HTML...
Plus de sujets relatifs à : forcer execution script PHP ou empecher fermeture fenetre?


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