Bonjour,

Je travail actuellement sur un petit serveur PHP exécuté en CLI. J'ai correctement démarré une connexion socket, j'ai donc le script suivent pour attendre une éventuelle connexion :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
while (true) {
    if(($user = socket_accept($sock)) === true){
        echo "Nouvelle connexion !";
    }
}
Jusqu'ici tout fonctionne parfaitement si un utilisateur se connecte le message : "Nouvelle connexion !" s'affiche.

Sauf que en plus d'attendre une connexion je doit pouvoir entré des commandes, que j'ai préalablement codé, sur la console. J'utilise donc ce script pour exécuté une commande :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$text = trim(fgets(STDIN));
$Command->execute($text);
J'ai donc eu l'idée de placer ce script dans la boucle précédente comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
while (true) {
****if(($user = socket_accept($sock)) == true){
********echo "Nouvelle connexion !");
****}
****$text = trim(fgets(STDIN));
****$Command->execute($text);
}
Malheureusement ce code ne fonctionne pas... Je ne peut pas entrer de commande sauf si un utilisateur ce connecte.

J'ai donc rendu la fonction socket_accept() non bloquante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
socket_set_nonblock($sock);
while (true) {
****if(($user = @socket_accept($sock)) === true){
********echo "Nouvelle connexion !");
****}
****$text = trim(fgets(STDIN));
****$Command->execute($text);
}
Cela règle partiellement mon problème... Chaque connexion est traité uniquement après l’exécution d'une commande, le message : "Nouvelle connexion !" s'affiche donc qu'a ce moment la. Or moi je souhaite pouvoir envoyer des commandes a tout moment et voir s'afficher le message en temps réel a chaque connexion.

J’espère avoir été compréhensible, car il est pour moi dans ce cas difficile de m'expliquer.

help me !

Cordialement Kaw7413.