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 :

Ordre d'exécution de deux scripts [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Ordre d'exécution de deux scripts
    Bonjour à tous,

    Pas sûr d'être dans la bonne sous-rubrique, mais bon...
    Voila le souci :

    Suite au post d'un formulaire, j'exécute d'abord un script qui écrit sur le serveur et affiche le résultat dans une iframe, puis, ENSUITE, je déclenche une autre fonction qui doit copier ce qui a été écrit précédemment...et là, mystère, elle s'exécute avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if(isset($_POST['submit'])){
     
    echo '<iframe src="le_script_a_executer_avant.php"></iframe>';
     
    if($_POST['suite'] == 1){
     
       fonction_a_executer_apres();
     
    }
     
    }
    Je fais le test suivant : dans "script_a_executer_avant.php" je fais un fwrite test_avant.txt avec time() et idem avec test_apres.txt dans la "fonction_a_executer_apres"...

    Résultat :
    test_avant.txt : 1298921524
    test_apres.txt : 1298921521

    J'ai essayé un sleep, ça change rien.
    C'est à cause de l'iframe ?
    Merci de vos lumières.

  2. #2
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Ce que tu observes n'a rien d'étonnant :
    Le script que tu as nommé "le_script_a_executer_avant.php" ne sera appelé que lorsque la page que tu es en train de fabriquer sera affichée côté client.
    Et cela ne pourra se faire tant que la page n'est pas terminée puis envoyée par le serveur, donc tant que "fonction_a_executer_apres()" n'a pas été exécutée.

    Fred

  3. #3
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonjour et merci de te pencher avec moi sur ce truc, euh... crétin.

    Ah ?
    Ben non, je ne capte pas.
    "script avant" est un template qui affiche une facture et l'enregistre en html sur le disque, une fois affichée.
    "script_apres" transforme ce html en PDF et l'envoie par mail au client.
    Sur la page qui "fabrique" tout ça, les 2 actions sont bien écrites l'une derrière l'autre. Pourquoi "script_apres" s'exécuterait avant "script_avant" ?

    Ce n'est pas "script_apres" qui déclenche "script_avant".
    Ce serait plutôt : une fois que "script_avant" a fait le boulot, alors "script_apres" peut faire le sien.

    Bon, je vais essayer de faire autrement, mais je trouve assez agaçant de ne pas comprendre ce truc.

  4. #4
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bon, ben d'accord : le crétin, c'est moi.

    J'avais un chdir dans la fonction de mon moteur de templates qui écrit ledit template sur le disque. Du coup ça faisait foirer l'appel de mon "script apres".
    Faut vraiment être vigilant avec chdir...
    Bonne journée à tous.

  5. #5
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    J'ai commenté ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if(isset($_POST['submit'])){
      echo '<iframe src="le_script_a_executer_avant.php"></iframe>';  // le_script_a_executer_avant.php sera appelé lors de l'affichage de la page html
      if($_POST['suite'] == 1){
        fonction_a_executer_apres(); // Tu écris ici dans test_apres.txt ?
      }
    }
    // La page est terminée côté serveur et envoyée au client
    //   C'est alors que le_script_a_executer_avant.php sera appelé et écrira dans  test_avant.txt
    Tu écris donc bien dans test_après avant d'écrire dans test_avant...
    A moins que fonction_a_executer_apres ne fasse pas exactement ce que j'imagine.
    Fred

  6. #6
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Je te réponds dans le code lui-même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if(isset($_POST['submit'])){
      echo '<iframe src="le_script_a_executer_avant.php"></iframe>';  // le_script_a_executer_avant.php sera appelé lors de l'affichage de la page html
    //oui, mais en l'appelant, il s'exécute et doit écrire dans test_avant.txt
      if($_POST['suite'] == 1){
        fonction_a_executer_apres(); 
        // Tu écris ici dans test_apres.txt ?
        // oui
      }
    }
    // La page est terminée côté serveur et envoyée au client
    //   C'est alors que le_script_a_executer_avant.php sera appelé et écrira dans  test_avant.txt
    Mais, en fait c'est résolu, et il n'y a plus de problème de séquence. Le chdir du script "executer_avant" déplaçait le script, et donc faisait planter "executer_apres" - qui crée le PDF. Comme j'avais plein de warnings avec ma classe PDF, je pensais que c'était un problème de séquence et que le fichier html écrit par "executer_avant" n'était pas encore écrit...mais non, c'était un problème de chemin.

    En tout cas, je te remercie beaucoup de t'être penché sur mon post.
    Bonne journée.

  7. #7
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Ton problème de séquence est résolu, tant mieux.
    Mais comme ton code m'a interrogé
    et
    que j'ai fait quelques tests pour vérifier,
    je t'en fait profiter, ainsi qu'à tous ceux qui auront le courage de lire ce qui suit :
    Un fichier index.php qui prépare une page avec une balise iframe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $t=time();
    $maPage = '<p>Avant la préparation du iframe :'.time().'</p>';
    $maPage .= '<iframe src="peutetreavant.php"></iframe>';
    $maPage .= '<p>Après la préparation du iframe :'.time().'</p>';
    echo utf8_decode($maPage);
     
    sleep(4); // Ma page html est prête, mais je ne l'enverrai que dans 4 secondes.
    et le script qui crée le contenu du frame peutetreavant.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php 
    $monFrame = '<p>Le contenu du iframe a été construit<br/>par peutetreavant.php à '.time().'</p><p>Et ben c\'est plutôt après index.php !</p>';
    echo utf8_decode($monFrame);
    résultat des courses en pièce jointe.

    Fred
    Images attachées Images attachées  

  8. #8
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Oui...étonnant...
    Comment tu expliques ça ?
    Et du coup, je comprends pas pourquoi ça fonctionne chez moi simplement parce que j'ai fait un chdir pour remettre le script dans le droit chemin, et, je le précise, mis un include à la place de l'iframe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    include('execute_avant.php');
    //comme ce fichier includé a un chdir qui déplace le script :
    chdir(dirname(__FILE__));
    execute_apres($params);
    Ce serait donc le fait d'utiliser un iframe qui inverse la séquence ?

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

Discussions similaires

  1. Exécuter deux scripts à la suite
    Par xavierdestev dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 06/08/2013, 13h16
  2. Exécution de mon script deux fois
    Par PAB/31/SAB dans le forum VBScript
    Réponses: 2
    Dernier message: 28/03/2013, 20h12
  3. [XL-2003] Ordre d'exécution dans un script / msoCotrolEdit
    Par Toto_1 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/08/2011, 18h50
  4. Ordre d'exécution du script
    Par derouteu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/06/2010, 17h28
  5. [OpenLayers - ASP.NET / C#] ordre d'exécution de scripts
    Par slim dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 22/04/2008, 15h08

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