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
415 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!

source:php.cn
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