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 :

[PHP-JS] Fonction pause en php


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 3
    Points
    3
    Par défaut [PHP-JS] Fonction pause en php
    Bonjour,

    Je voulais savoir si quelqu'un connaissait une fonction en php, ou tout autre technique qui permettrait de mettre en pause l'exécution d'un script pendant quelques secondes, pour reprendre en suite.

    J'en ai besoin pour un traitement où PHP crée un fichier .vbs (WSH), puis doit l'exécuter. Seulement, PHP lance la création du fichier, mais execute ensuite le reste du code sans attendre que le fichier soit créé... donc mon code ne marche pas.

    J'ai essayé sleep(), mais php met le programme en pause avant de commencer l'execution, donc le résultat reste le même.
    J'ai aussi essayé avec "header("Refresh:10;URL=page_de_lancement.php");", mais cela reste sans effet...

    Merci d'avance a ceux qui auraient une solution...

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    En fait tu voudrais une méthode qui bloque ton script php jusqu'à ce que la création du fichier vbs soit terminé c'est ca?
    Ton fichier vbs est crée depuis php? dans ce cas je comprends pas trop, parce que le code s'exectute linéairement et donc, le code ne continuera pas tant que ton fichier vbs n'est pas généré.
    Par contre,si ton fichire vbs est crée par un autre programme, là c'est plus compliqué.

    Mets donc un peu ton code que l'on puisse voir plus en détails s'il te plait.

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Eh bien depuis l'écran où l'on doit lancer la création du fichier, je fais appel à une fonction (avec php), que voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function CO_programme_extraction_globale(){
        include ("CO_extract.php");
        header("Refresh:10;URL=CO_exe_extract.php");
        echo 'Veuillez patienter, classeur en cours de création...';
     }
    le fichier inclus CO_extract.php contient la fonction qui lance la création du fichier, et le fichier CO_exe_extract.php, la fonction permettant son exécution (via popen).

    Dans cet exemple, j'ai mis un header refresh, car cette méthode avait marché en test, j'ai aussi essayé avec sleep(), mais dans le premier cas (refresh), l'instruction est sautée (apparement), et avec sleep(), l'exécution est mise en pause avant la création du fichier...

  4. #4
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    MEA CULPA!

    Ben en fait, je me cachais l'erreur suivante avec le reste de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Warning: Cannot modify header information
     - headers already sent by (output started at
    chemin_d_acces\fichier1.php:3) in chemin_d_acces\fichier2.php
    on line 4
    Bon, ben ca m'identifie déjà l'erreur, maintenant, le problème reste le même, vu que je ne peux toujours pas exécuter mon fichier

    Alors voici les nouvelles questions :

    Existe-t'il un moyen de déclarer un header en plein milieu du code?
    Sinon, comment faire pour :
    lancer la création d'un fichier (.vbs), puis mettre en pause l'exécution du script le temps que le fichier soit utilisable par popen...

    Je sais, ca aurait été mieux dans un autre langage que PHP4 (Easy-php) mais j'ai pas choisi

  5. #5
    Membre actif Avatar de MicroPuce
    Inscrit en
    Mai 2004
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 262
    Points : 212
    Points
    212
    Par défaut
    Salut,
    Donc, si j'ai bien compris ton problème, ton histoire de pause, pour moi, ça serait 2 scripts distincts :
    le premier crée le fichier et envoie au client un message quelconque (attente?) avec un refresh dans le header qui redirige vers ton deuxieme script qui poursuit le traitement.
    Pour le problème du header, c'est à toi d'écrire ton script pour t'assurer qu'aucun caractere (retour chariot ou espace dans des include par exemple!) n'a été envoyé au client : dès que tu envoies quelque chose à ton client (un espace est considéré comme du texte ) les header http sont envoyés avant, et tu ne peux plus utiliser la fonction header de PHP.
    Vala, cette contrainte du header impose parfois une 'tite gymnastique mais c'est rarement insurmontable
    A pluche...

  6. #6
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 6
    Points : 3
    Points
    3
    Par défaut



    Ben, en fait c'était un peu ce que tu suggérais que je faisais, mais je ne savais pas que les retours chariots pouvaient bloquer les headers.

    La solution que j'ai trouvée est donc :

    depuis le script de mon écran (qui fait plein d'aller et retour sur lui-même donc pas possible de supprimer les retours chariots etc...), j'ai utilisé la fonction window.open de JavaScript comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <script>
    window.open("Chemin_du_fichier/fichier.php","_self");
    </script>
    dans le fichier.php, j'ai créé mon fichier, puis fais le header refresh comme tu me suggérais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    include ("fichier_de_creation_du_vbs.php");
    $wsh = new fonction_de_creation();
    header("Refresh:10;URL=fichier_d_execution_du_vbs.php");
    echo 'Veuillez patienter, exécution en cours...';
    et enfin, dans mon fichier d'execution, j'ai ouvert le fichier avec popen :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $exe=popen("fichier_a_executer.vbs",'r');
    pclose ($exe);
    echo 'exécution effectuée';
    Voila ben un grand merci a vous pour m'avoir aidé, et j'espère que ca pourra en débloquer d'autres (sinon je vais me sentir seul... )

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

Discussions similaires

  1. [PHP-JS] passer une variable php à une fonction JS
    Par naivenu dans le forum Langage
    Réponses: 4
    Dernier message: 18/07/2008, 13h06
  2. [PHP-JS] Fonction strlen en php
    Par viny dans le forum Langage
    Réponses: 20
    Dernier message: 04/10/2006, 14h09
  3. Réponses: 5
    Dernier message: 14/06/2006, 16h35
  4. [PHP-JS] pb de variable php dans fonction Js
    Par logone dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/06/2006, 23h20
  5. [PHP-JS] pb lecture script php dans une fonction au démarrage
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/02/2005, 15h07

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