Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/02/2011, 20h46   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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 :
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2011, 21h06   #2
Membre chevronné
 
Avatar de micetf
 
Homme Fred
Professeur des Ecoles
Inscription : mai 2009
Messages : 503
Détails du profil
Informations personnelles :
Nom : Homme Fred
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : mai 2009
Messages : 503
Points : 701
Points : 701
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
micetf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 07h16   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 09h03   #4
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 12h30   #5
Membre chevronné
 
Avatar de micetf
 
Homme Fred
Professeur des Ecoles
Inscription : mai 2009
Messages : 503
Détails du profil
Informations personnelles :
Nom : Homme Fred
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : mai 2009
Messages : 503
Points : 701
Points : 701
J'ai commenté ton code :
Code :
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
micetf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 13h17   #6
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Je te réponds dans le code lui-même :

Code :
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.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2011, 13h37   #7
Membre chevronné
 
Avatar de micetf
 
Homme Fred
Professeur des Ecoles
Inscription : mai 2009
Messages : 503
Détails du profil
Informations personnelles :
Nom : Homme Fred
Localisation : France, Rhône (Rhône Alpes)

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

Informations forums :
Inscription : mai 2009
Messages : 503
Points : 701
Points : 701
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 :
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 :
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
Type de fichier : jpg sequence.JPG (23,9 Ko, 4 affichages)
micetf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 09h35   #8
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
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 :
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 ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h28.


 
 
 
 
Partenaires

Hébergement Web