Pertanyaan PHP: Mengapa exec () mengembalikan output?


Saya sedang menulis skrip PHP untuk digunakan untuk memeriksa koneksi jaringan dengan perintah shell Linux ping menyebutnya dengan PHP exec():

<?php


// Bad IP domain for testing.
$domain_bad = "lksjdflksjdf.com";

$ip_address = $domain_bad;

exec("ping -c 1 $domain_bad", $output, $return_var);

var_dump($return_var);
echo "return_var is: $return_var" . "\n";
var_dump($output);


exit;
?>

Saya tidak mendapatkan output untuk pesan kesalahan dari ping masuk $output itulah yang saya harapkan:

$ php try.php
ping: unknown host lksjdflksjdf.com
int(2)
return_var is: 2
array(0) {
}

Jika domain adalah domain yang bagus, seperti yahoo.com, maka $output memiliki output dari ping dalam sebuah array. Tetapi jika itu kesalahan seperti 'ping: unknown host lksjdflksjdf.com' itu tidak dikembalikan ke $output larik.

Mengapa ini terjadi dan apakah ada metode yang lebih baik untuk melakukan ini?


30
2018-05-21 08:06


asal


Jawaban:


Anda harus mengarahkan ulang stderr ke stdout.

Untuk melakukan itu, ubah panggilan exec Anda () seperti ini:

exec("ping -c 1 $domain_bad 2>&1", $output, $return_var);

Info lebih lanjut tentang 2>&1 berarti sini.


74
2018-05-21 08:12



Jika ada yang datang ke sini dan tidak bisa menyelesaikan masalah Anda, coba periksa php.ini file di disabled_functions garis.


1
2018-03-07 06:30