Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich die Standardfehlerausgabe von „exec()' in PHP erfassen?

Wie kann ich die Standardfehlerausgabe von „exec()' in PHP erfassen?

Linda Hamilton
Linda HamiltonOriginal
2024-11-29 07:39:12536Durchsuche

How Can I Capture Standard Error Output from `exec()` in PHP?

Standardfehlerstrom nach Exec() in PHP abrufen

Problem:

Sie' Sie führen einen Befehl erneut mit der Funktion exec() von PHP aus und möchten potenzielle Fehlermeldungen erfassen, die in den Standardfehler geschrieben werden stream.

Lösung:

PHP bietet einen umfassenderen Ansatz zur Steuerung und Erfassung von Standardausgabe- und Fehlerströmen mit proc_open.

Anleitung:

  1. Eingabe/Ausgabe (I/O) initialisieren Deskriptorspezifikationen, die das Verhalten von Standard-Streams definieren:
$descriptorspec = [
    0 => ["pipe", "r"],  // stdin
    1 => ["pipe", "w"],  // stdout
    2 => ["pipe", "w"],  // stderr
];
  1. Führen Sie den Befehl mit proc_open aus und geben Sie die Deskriptorspezifikationen an:
$process = proc_open($command, $descriptorspec, $pipes, dirname(__FILE__), null);
  1. Lesen Sie mit aus der Standardfehlerpipe stream_get_contents:
$stderr = stream_get_contents($pipes[2]);

Beispiel:

Betrachten Sie das folgende Skript test.sh:

#!/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;

In einem PHP-Skript: Wir können test.sh ausführen und stdout und erfassen stderr:

$descriptorspec = [0 => ["pipe", "r"], 1 => ["pipe", "w"], 2 => ["pipe", "w"]];
$process = proc_open('./test.sh', $descriptorspec, $pipes);

$stdout = stream_get_contents($pipes[1]);
$stderr = stream_get_contents($pipes[2]);

echo "stdout: $stdout";
echo "stderr: $stderr";

Ausgabe:

stdout: this is on stdout
this is on stdout too

stderr: this is on stderr
this is on stderr too

Das obige ist der detaillierte Inhalt vonWie kann ich die Standardfehlerausgabe von „exec()' in PHP erfassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn