2013-05-21 15 views
27

Sto scrivendo uno script PHP da utilizzare per verificare la presenza di connessioni di rete con comando della shell Linux ping chiamata con exec() di PHP:PHP: Perché exec() non restituisce l'output?

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

Non ricevo l'uscita per il messaggio di errore da ping in $output che è quello che mi aspetto:

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

Se il dominio è un buon dominio, ad esempio yahoo.com, quindi $output ha l'uscita da ping in un array. Ma se si tratta di un errore come 'ping: unknown host lksjdflksjdf.com' non viene restituito alla matrice $output.

Perché sta succedendo questo e c'è un metodo migliore per farlo?

risposta

68

È necessario reindirizzare lo stderr su stdout.

Per fare questo, cambiare l'exec() chiamano in questo modo:

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

Maggiori informazioni su 2>&1 significa here.

+0

Questo è tutto! L'ho trascurato. Ha funzionato, grazie !!! – Edward

+0

Appena me lo permetterà! :-) – Edward

+0

aggiungi 2> & 1 ma l'output è ancora array vuoto, se eseguito da cmd, emette 2 valori –

1

Se qualcuno è venuto qui e non è stato possibile risolvere il problema, prova a controllare il file php.ini alla riga disabled_functions.

Problemi correlati