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