IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Script qui continue de s'exécuter


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut Script qui continue de s'exécuter
    Bonjour à tous.

    Je viens de me rendre contre d'une chose sur mon site.
    J'ai une page web normal, avec une iframe dedans qui appel un fichier php.
    Dans ce fichier php, j'ai un sleep(5); tout en haut de la page.
    Hors je pensais que si le navigateur était fermé avant les 5 secondes, la suite du script ne continuais pas.
    Hors, je viens de voir que même si le navigateur été fermé avant 5 secondes, le script continuais quand même du coté du serveur.
    comment est ce que je le sais? simplement, parce que aprés dans le script j'ai une insertion mysql, et que même si je ferme le navigateur, l'insertion se fait.

    Y a t'il un moyen d'éviter cela ?
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ignore_user_abort(false);
    mais ca ne fonctionne pas.

    Merci pour votre aide, ca me sera vraiment utile.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    PHP ignore tout de ce qui se passe du côté du poste client.

    Une solution possible mais qui reste toujours peu fiable serait de declencher un evenement javascript a la fermeture de la page modifiant un flag (base de donnée ou session PHP) grace à Xmlhttprequest.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    Le soucis c'est que j'ai une page qui le fait le timer de 5 secondes en javascript.

    Mais c'est sur ma seconde page, pour les personnes qui n'ont pas le javascript activé.

    Est ce que mettre une page intermédiaire avec juste le sleep et un header vers la page final pourrait marcher?

  4. #4
    Membre confirmé
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 453
    Points
    453
    Par défaut
    Citation Envoyé par sabotage Voir le message
    PHP ignore tout de ce qui se passe du côté du poste client.
    Je croyais ca moi aussi, jusqu'à ce que je regarde la doc.

    Si tu appuies sur le bouton stop de ton navigateur un segment TCP avec le flag RST a 1 est envoyé au serveur web sur lequel tu as fait une requête HTTP et ca interrompt l'exécution du script PHP si il est en cours d'execution.

    Par contre ca ne marche que si l'utilisateur appuie sur STOP .
    Keep it simple, stupid !

  5. #5
    Membre confirmé
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 453
    Points
    453
    Par défaut
    OK ! En fait tu peux en javascript "appuyer sur le bouton stop"

    Ca interrompt l'execution du script serveur, a essayer
    Keep it simple, stupid !

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu appuies sur le bouton stop de ton navigateur un segment TCP avec le flag RST a 1 est envoyé au serveur web
    Personnellement j'ai fais le test et ca ne fonctionnait pas.
    Sur firefox, le bouton STOP n'est meme pas actif quand la page est chargée.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 453
    Points
    453
    Par défaut
    Le bouton stop reste actif uniquement si des éléments sont en cours de chargement sur la page

    edit : Je croyais que ca marche pas mais si ca marche
    Keep it simple, stupid !

  8. #8
    Membre confirmé
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 453
    Points
    453
    Par défaut
    En fait ca marche, uniquement si PHP continue d'écrire sur la sortie standard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php 
    ini_set('output_buffering', 'off'); // permet d'envoyer directement les donnees
    ?>
    <h1> Salut </h1>
    <script language="javascript">
    window.stop();
    </script>
    <?php
    $t = time();
    while(1){ // Un sleep 5 "special"
        echo "\n";
    	if(time() >= $t + 5) break; 
    }
    file_put_contents('test', 'test'); // ne sera pasexecute
    ?>
    Mec
    Ne surtout pas utiliser tel quel sur un serveur
    Keep it simple, stupid !

  9. #9
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 584
    Points : 235
    Points
    235
    Par défaut
    J'ai résolu mon problème en plaçant une page intermédiare avec le sleep puis un hearder aprés.
    Si le navigateur est fermé, le header ne fonctionne pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/08/2012, 16h10
  2. Réponses: 8
    Dernier message: 16/03/2007, 16h43
  3. Réponses: 1
    Dernier message: 12/03/2007, 19h56
  4. Script qui s'exécute deux fois ?
    Par ben53 dans le forum Langage
    Réponses: 1
    Dernier message: 29/01/2007, 15h56
  5. Script qui s'exécute 2 fois!
    Par franculo_caoulene dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 07/12/2005, 09h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo