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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Socket bloquante + redirection


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Points : 42
    Points
    42
    Par défaut Socket bloquante + redirection
    Bonjour à tous,

    je rencontre un problème lors de mon utilisation avec une socket.

    J'ai une page web <gras>execution.php</gras> me permettant de communiquer, via une socket locale, avec un programme écrit en C (dont la fonction est d'exécuter un programme particulier).

    Idéalement, je voudrais que ma page php envoie une série d'arguments au programme C via la socket puis me redirige vers une autre page.
    Or, ici ma socket est bloquante et après avoir envoyé les arguments, la page <gras>execution.php</gras> reste en attente et ne me redirige pas vers l'autre page. En fait, la page attent que l'exécution du programme lancé par C soit finie avant de me rediriger.

    Voici le code php :

    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
     
    <?php
    $idSocket = fsockopen("127.0.0.1",5000, $codeErreur, $msgErreur); 
     
    // Envoi de données au pgm C
    fputs($idSocket,$path."\0"); 
     
    $PID = fgets($idSocket,34);
     
    fclose($idSocket);
     
    header('location:process.php?currentPid='.$PID);
    exit();
     
    ?>
    J'envoie donc les arguments, j'attends de recevoir le pid du programme lancé par le programme C et ensuite je veux rediriger sans attendre la fin du programme lancé.

    Du côté du code C, j'envoie pourtant le "pid" à C avant l'exécution donc en pratique je ne devrais pas attendre la fin de l'exécution du programme.
    Je ne comprends pas alors pourquoi je reste bloqué sur la page <gras>execution.php</gras> le temps de l'exécution.

    Voici le code C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //Reception des arguments
    recv(socket,buffer, sizeof(execution.path), 0);
     
    //Envoie du PID	du processus courant à PHP                
    send(socket,pid_String,sizeof(char)*4,0);
     
    //Execution du programme 
    flux = popen (execution.path, "r");
    Comprenez-vous pourquoi, après avoir reçu le pid du côté php je ne suis pas rediriger directement?

    Merci d'avance

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 110
    Points : 42
    Points
    42
    Par défaut
    Pour faire avancer la conversation...

    Je viens de voir qu'il est possible d'avoir une socket en mode non bloquante de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    stream_set_blocking(idsocket, mode)
    ?>
    avec le mode TRUE pour la mettre bloquante (par défaut) et FALSE non bloquante.

    Bien que ça existe donc, je ne vois pas trop comment m'en servir.

    Dans mon cas je veux, après avoir reçu le pid par le programme C, fermer la socket et rediriger vers une autre page.

    Je ne vois pas pourquoi la redirection ne s'effectue qu'apèrs la terminaison du programe C et non lors de la fermeture de ma socket.

    J'espère avoir été assez claire. N'hésitez pas à demander des précisions si je ne suis pas assez claire

    Merci

Discussions similaires

  1. Problème Swing / socket bloquant
    Par soussou92 dans le forum AWT/Swing
    Réponses: 0
    Dernier message: 12/05/2010, 13h29
  2. problème de socket bloquante
    Par phoenixatareva dans le forum C
    Réponses: 3
    Dernier message: 25/03/2010, 13h16
  3. Problème de socket bloquant et select sans effet.
    Par asmerisme dans le forum Réseau
    Réponses: 5
    Dernier message: 23/02/2010, 18h55
  4. socket bloquante python?
    Par kakuzu dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 14/05/2008, 23h33
  5. [swing][socket]méthode ServerSocket.accept() bloquante?
    Par the_ugly dans le forum EDT/SwingWorker
    Réponses: 6
    Dernier message: 07/11/2005, 11h15

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