it-swarm.com.de

PHP: Warum gibt exec () keine Ausgabe zurück?

Ich schreibe ein PHP Skript, das verwendet wird, um mit dem Linux-Shell-Befehl ping nach Netzwerkverbindungen zu suchen und es mit dem PHP-Befehl exec() aufzurufen:

<?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 erhalte keine Ausgabe für die Fehlermeldung von ping in $output, Was ich erwarte:

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

Wenn die Domain eine gute Domain ist, wie z. B. yahoo.com, hat $output Die Ausgabe von ping in einem Array. Wenn es sich jedoch um einen Fehler wie 'ping: unknown Host lksjdflksjdf.com' Handelt, wird er nicht an das Array $output Zurückgegeben.

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

43
Edward

Sie sollten stderr auf stdout umleiten.

Ändern Sie dazu Ihren exec () -Aufruf wie folgt:

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

Mehr Infos über 2>&1 Bedeutung hier .

98
Hariprasad

Wenn die obige Antwort Ihr Problem nicht lösen konnte, ist exec() möglicherweise deaktiviert. Sie können versuchen, php.ini Datei bei disabled_functions Linie.

4