2013-05-21 66 views
27

我正在寫一個PHP腳本來檢查與Linux shell命令ping網絡連接與PHP的exec()稱之爲: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; 
?> 

我沒有收到來自中國平安在$output錯誤消息輸出這就是我期待:

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

如果域是一個好域名,如yahoo.com,然後$output有平安在陣列的輸出。但是,如果這是一個錯誤,例如'ping: unknown host lksjdflksjdf.com'它不會返回到$output陣列。

爲什麼會發生這種情況,是否有更好的方法來做到這一點?

回答

68

您應該將stderr重定向到stdout。

爲了做到這一點,改變你的exec()調用是這樣的:

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

更多信息有關2>&1意思here

+0

就是這樣!我忽略了這一點。它的工作,謝謝! – Edward

+0

只要它讓我! :-) – Edward

+0

add 2>&1但輸出仍然是數組空,如果從cmd執行,它輸出2個值 –

1

如果有人來這裏並不能解決您的問題,請嘗試檢查php.ini文件在disabled_functions線。

相關問題