forcer execution script PHP ou empecher fermeture fenetre?

forcer execution script PHP ou empecher fermeture fenetre? - PHP - Programmation

Marsh Posté le 17-10-2003 à 14:00:49    

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
Reply

Marsh Posté le 17-10-2003 à 14:00:49   

Reply

Marsh Posté le 17-10-2003 à 14:03:43    

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é"

Reply

Marsh Posté le 17-10-2003 à 15:32:09    

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

Reply

Marsh Posté le 17-10-2003 à 15:45:31    

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.

Reply

Marsh Posté le 17-10-2003 à 15:51:29    

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
Reply

Marsh Posté le 17-10-2003 à 16:01:51    

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é.
Reply

Marsh Posté le 17-10-2003 à 16:02:28    

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

Reply

Marsh Posté le 17-10-2003 à 16:03:55    

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.

Reply

Marsh Posté le 17-10-2003 à 16:04:40    

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)

Reply

Marsh Posté le 17-10-2003 à 16:05:18    

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".

Reply

Marsh Posté le 17-10-2003 à 16:05:18   

Reply

Marsh Posté le 17-10-2003 à 16:07:24    

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é.
Reply

Marsh Posté le 17-10-2003 à 16:09:57    

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é.
Reply

Marsh Posté le 17-10-2003 à 16:10:32    

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  :)

Reply

Marsh Posté le 17-10-2003 à 16:26:13    

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?

Reply

Marsh Posté le 17-10-2003 à 16:58:00    

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)

Reply

Marsh Posté le 17-10-2003 à 17:00:56    

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


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 17-10-2003 à 17:05:20    

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é
 
 

Reply

Marsh Posté le 17-10-2003 à 21:19:39    

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é.
Reply

Marsh Posté le 17-10-2003 à 22:00:31    

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é.
Reply

Marsh Posté le 17-10-2003 à 22:29:38    

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.

Reply

Marsh Posté le 20-10-2003 à 09:23:35    

je vous remercie

Reply

Marsh Posté le 03-03-2011 à 20:07:37    

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.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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