Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 25/11/2010, 00h31   #1
Invité de passage
 
Inscription : octobre 2009
Messages : 7
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : octobre 2009
Messages : 7
Points : 0
Points : 0
Par défaut Ordre d'appel des fonctions

Salut tout le monde,

Je suis en train de rédiger un script PHP est je capote là, sur une connerie.

Alors voilà, le but c'est de faire un formulaire qui me permette de transférer des fichiers. Le formulaire est généré dynamiquement (avec du PHP donc). Cette partie la fonctionne bien

Par contre, mon problème vient ensuite. Quand je clique sur mon bouton Submit, j'appelle une première fonction. Quand celle-ci se termine, elle en appelle une seconde. La encore, c'est beau.

La première fonction pouvant prendre du temps à se faire (copie de fichier), je veux faire une boucle d'attente de quelques dizaines de secondes. Une fois que la copie est finie, paf, j'arrête de boucler et je lance la seconde fonction. Vous me suivez?

Voilà le "Mais" qui arrive. Mais, donc, quand dans ma boucle je mets un sleep() pour patienter, eh bien ce sleep() semble être exécuté au chargement de la page Comment se-fesse? Preuve en est que quand je mets des alertes et autres joyeusetés pour voir où j'en suis, tout s'affiche mais seulement après que le temps définit dans sleep() soit écoulé...
Maintenant, si à la place du sleep() j'écris des conneries, genre, un "." , alors là, ça marche. L'exécution se fait dans le bon ordre (en tout cas celui que je veux)...

Je deviens fou et je ne comprends pas quel est ce phénomène.

Quelqu'un pourrait m'expliquer?

Merci d'avance
ElSegador66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 08h38   #2
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 167
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 167
Points : 6 451
Points : 6 451
Tu n'es pas dans du dynamique.

Prend le code suivant

Code :
1
2
3
4
5
6
7
8
9
10
11
 
<?php
// Heure actuelle
echo date('h:i:s') . "\n";
 
// Stoppe pour 10 secondes
sleep(10);
 
// retour !
echo date('h:i:s') . "\n";
?>

Si tu lis, il doit afficher une date,attendre 10 secondes puis afficher l'autre date.

En théorie c'est ce qu'il fait, mais comme l'affichage de PHP n'est pas rafraichi, il affichera les deux dates en même temps après dix secondes

http://be2.php.net/manual/fr/function.sleep.php
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 08h38   #3
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 134
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 134
Points : 2 877
Points : 2 877
PHP est executé côté serveur, si après ton sleep() tu ne fais pas un flush(), le serveur ne commence pas l'envoi du contenu au navigateur et le fait uniquement à la fin de l'execution du script.

Pourrais-tu nous fournir un script présentant ton problème et que nous pourrions tester ?
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 21h45   #4
Invité de passage
 
Inscription : octobre 2009
Messages : 7
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : octobre 2009
Messages : 7
Points : 0
Points : 0
Salut,

Ok, je comprends le coup du flush et je vais tenter ça.
Le truc que je ne comprends pas, c'est pourquoi le sleep() semblait s'exécuter même quand a priori, il n'était pas appelé car dans un bloc inaccessible (apparemment en tout cas).
J'essaie le flush() et je vous dis.
ElSegador66 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 15h22   #5
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 134
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 134
Points : 2 877
Points : 2 877
Franchement je n'ai pas trop d'idées, faudrait vraiment un p'tit bout de code à tester
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 16h27   #6
Membre éclairé
 
Inscription : octobre 2004
Messages : 235
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 235
Points : 360
Points : 360
Un sleep() dans du php ? Je ne vois vraiment pas à quoi ça sert là ...

Tu peux fournir un peu plus de code, notamment ton formulaire ?
Joker-eph est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h32.


 
 
 
 
Partenaires

Hébergement Web