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
Freigeben: 2024-11-29 07:39:12
Original
440 Leute haben es durchsucht

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
];
Nach dem Login kopieren
  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);
Nach dem Login kopieren
  1. Lesen Sie mit aus der Standardfehlerpipe stream_get_contents:
$stderr = stream_get_contents($pipes[2]);
Nach dem Login kopieren

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;
Nach dem Login kopieren

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";
Nach dem Login kopieren

Ausgabe:

stdout: this is on stdout
this is on stdout too

stderr: this is on stderr
this is on stderr too
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage