Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah Saya Boleh Menangkap Output Ralat Standard daripada `exec()` dalam PHP?

Bagaimanakah Saya Boleh Menangkap Output Ralat Standard daripada `exec()` dalam PHP?

Linda Hamilton
Lepaskan: 2024-11-29 07:39:12
asal
440 orang telah melayarinya

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

Dapatkan Strim Ralat Standard selepas Exec() dalam PHP

Masalah:

Anda' melaksanakan semula arahan menggunakan fungsi exec() PHP dan ingin menangkap mesej ralat berpotensi yang ditulis kepada ralat standard strim.

Penyelesaian:

PHP menyediakan pendekatan yang lebih komprehensif untuk mengawal dan menangkap kedua-dua output standard dan aliran ralat menggunakan proc_open.

Cara Menggunakan:

  1. Mulakan input/output Spesifikasi deskriptor (I/O), yang mentakrifkan kelakuan strim standard:
$descriptorspec = [
    0 => ["pipe", "r"],  // stdin
    1 => ["pipe", "w"],  // stdout
    2 => ["pipe", "w"],  // stderr
];
Salin selepas log masuk
  1. Laksanakan arahan menggunakan proc_open dan sediakan spesifikasi deskriptor:
$process = proc_open($command, $descriptorspec, $pipes, dirname(__FILE__), null);
Salin selepas log masuk
  1. Baca daripada paip ralat standard menggunakan stream_get_contents:
$stderr = stream_get_contents($pipes[2]);
Salin selepas log masuk

Contoh:

Pertimbangkan test.sh skrip berikut:

#!/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;
Salin selepas log masuk

Dalam skrip PHP, kita boleh menjalankan test.sh dan menangkap stdout dan 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";
Salin selepas log masuk

Output:

stdout: this is on stdout
this is on stdout too

stderr: this is on stderr
this is on stderr too
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangkap Output Ralat Standard daripada `exec()` dalam PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan