2013-05-21 21 views
27

Ich bin ein PHP-Skript zu schreiben verwendet werden für Netzwerkverbindungen mit Linux-Shell-Befehl zu überprüfen ping es mit PHP exec() Aufruf:PHP: Warum gibt exec() keine Ausgabe zurück?

<?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; 
?> 

Ich bin nicht die Ausgabe für die Fehlermeldung von Ping immer in $output das ist, was ich erwarte:

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

Wenn die Domäne eine gute Domain, wie yahoo.com, dann $output die Ausgabe von Ping in einem Array hat. Aber wenn es ein Fehler wie 'ping: unknown host lksjdflksjdf.com' ist, wird es nicht an das Array $output zurückgegeben.

Warum passiert das und gibt es eine bessere Methode, dies zu tun?

Antwort

68

Sie sollten stderr auf stdout umleiten.

, das zu tun, ändern Sie Ihre exec() wie folgt aufrufen:

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

Weitere Daten zu 2>&1here Bedeutung.

+0

Das war's! Das habe ich übersehen. Es hat funktioniert, danke !!! – Edward

+0

Sobald es mich lassen wird! :-) – Edward

+0

add 2> & 1 aber Ausgabe ist noch Array leer, wenn von cmd ausgeführt wird, gibt es 2 Werte aus –

1

Wenn jemand hierher kam und Ihr Problem nicht lösen konnte, versuchen Sie php.ini Datei unter disabled_functions Zeile zu überprüfen.

Verwandte Themen