Maison > développement back-end > tutoriel php > Comment puis-je capturer à la fois stdout et stderr à partir d'une commande Exec() en PHP ?

Comment puis-je capturer à la fois stdout et stderr à partir d'une commande Exec() en PHP ?

Mary-Kate Olsen
Libérer: 2024-12-30 03:28:16
original
299 Les gens l'ont consulté

How Can I Capture Both stdout and stderr from an Exec() Command in PHP?

PHP StdErr après Exec()

En PHP, la fonction exec() exécute une commande et renvoie la sortie de la sortie standard de la commande. Cependant, si la commande écrit sur stderr, cette sortie n'est pas capturée par exec().

Pour capturer à la fois stdout et stderr à partir d'une commande, vous pouvez utiliser la fonction proc_open(). proc_open() offre un plus grand niveau de contrôle sur le processus d'exécution de la commande, y compris la possibilité de rediriger les flux stdin, stdout et stderr de la commande.

Exemple :

Considérons le script shell suivant, test.sh, qui écrit à la fois dans stderr et stdout :

#!/bin/bash

echo 'this is on stdout';
echo 'this is on stdout too';

echo 'this is on stderr' >&2;
echo 'this is on stderr too' >&2;
Copier après la connexion

Pour exécuter ce script en PHP et capturer à la fois stdout et stderr, vous pouvez utiliser le code suivant :

$descriptorspec = [
    0 => ['pipe', 'r'],  // stdin
    1 => ['pipe', 'w'],  // stdout
    2 => ['pipe', 'w'],  // stderr
];

$process = proc_open('./test.sh', $descriptorspec, $pipes, dirname(__FILE__), null);

$stdout = stream_get_contents($pipes[1]);
fclose($pipes[1]);

$stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);

echo "stdout : \n";
var_dump($stdout);

echo "stderr :\n";
var_dump($stderr);
Copier après la connexion

Sortie :

Lorsque vous exécutez le script PHP ci-dessus, vous obtiendrez le résultat suivant :

stdout :
string(40) "this is on stdout
this is on stdout too"
stderr :
string(40) "this is on stderr
this is on stderr too"
Copier après la connexion

Le résultat montre les flux stdout et stderr du script test.sh.

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