Maison > développement back-end > tutoriel php > Comment puis-je obtenir une sortie en direct à partir des commandes PHP Shell ?

Comment puis-je obtenir une sortie en direct à partir des commandes PHP Shell ?

Mary-Kate Olsen
Libérer: 2024-12-01 00:41:11
original
608 Les gens l'ont consulté

How Can I Achieve Live Output from PHP Shell Commands?

Sortie en direct avec PHP utilisant popen() et passthru()

La fonction shell_exec() de PHP vous permet d'exécuter une commande et de capturer son sortir. Cependant, l'affichage de la sortie en direct pendant l'exécution de la commande n'est pas possible avec shell_exec() ou d'autres fonctions intégrées comme system(), exec() ou passthru().

Pour une sortie en direct, pensez à utiliser popen( ) plutôt. Il ouvre un canal vers un processus et vous permet de lire ou d'écrire ses entrées/sorties comme s'il s'agissait d'un fichier.

Passthru() pour une sortie immédiate :

Si vous devez afficher la sortie directement à l'utilisateur sans attendre la fin de la commande, vous pouvez utiliser passthru() :

echo '<pre class="brush:php;toolbar:false">';
passthru($cmd);
echo '
';
Copier après la connexion

Popen() pour la sortie en temps réel :

Pour afficher la sortie en direct pendant l'exécution de la commande, utilisez popen() et un while loop :

while (@ ob_end_flush()); // end output buffers

$proc = popen($cmd, 'r');
echo '<pre class="brush:php;toolbar:false">';
while (!feof($proc)) {
    echo fread($proc, 4096);
    @ flush();
}
echo '
';
Copier après la connexion

Ce code ouvre un canal vers la commande, lit sa sortie en morceaux et l'affiche sur le fly.

Informations utiles :

  • Appelez session_write_close() avant la boucle pour éviter les problèmes de session.
  • Pour les serveurs derrière nginx, ajoutez l'en-tête 'X-Accel-Buffering: no' pour empêcher la mise en mémoire tampon nginx.
  • Notez que la sortie en direct peut être perturbateur si votre code s'exécute dans une boucle qui met également à jour la session.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal