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

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

DDD
DDDoriginal
2024-12-02 20:17:12677parcourir

How Can I Get Live Output from Shell Commands in PHP?

Accès à la sortie en direct via PHP avec les commandes Shell

La fonction shell_exec de PHP fournit un moyen pratique d'exécuter des commandes shell à partir de scripts PHP. Cependant, il peut être difficile de récupérer la sortie en direct de ces commandes pendant l'exécution. Cet article explore deux méthodes pour obtenir cette fonctionnalité.

popen() et interactivité

Pour interagir avec le processus et lire sa sortie pendant son exécution, utilisez popen() . Cette fonction renvoie un pointeur de fichier qui peut être traité comme n'importe quelle autre ressource de fichier.

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

Ce script démarre la commande, lit sa sortie par morceaux de 4 096 octets et l'imprime directement sur la page. L'appel flush() garantit que la sortie est affichée immédiatement.

Commodité avec passthru()

Si l'interactivité en direct n'est pas requise, passthru() propose une approche alternative. Cette fonction renvoie directement la sortie d'une commande sur la page.

echo '<pre class="brush:php;toolbar:false">';
passthru($cmd);
echo '
';

Bien que passthru() soit plus simple, elle génère le résultat complet de la commande en une seule fois, ce qui peut ne pas convenir aux commandes qui génèrent une grande quantité de sortie.

Conclusion

popen() et passthru() offrent tous deux des mécanismes différents pour accéder à la sortie en direct à partir des commandes shell en PHP. popen() fournit un contrôle précis sur la récupération des données, permettant des mises à jour en temps réel. passthru(), en revanche, sacrifie l'interactivité au profit de la facilité d'utilisation, ce qui le rend adapté aux scénarios où une sortie immédiate est souhaitée.

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:
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