Shell Output sul browser in tempo reale

  • Creatore Discussione Creatore Discussione senyek
  • Data di inizio Data di inizio

senyek

Nuovo Utente
23 Feb 2011
2
0
0
Ciao a tutti,
sono giorni che cerco di capire come fare per mandare su pagina web in tempo reale l'output di uno script shell o anche di un semplice comando.
Le più comuni funzioni di php mi consentono di raccogliere l'output e di riproporlo ad operazione conclusa...un esempio banale:

<?php
$output = shell_exec('ping -c10 x.x.x.x');
echo $output;
?>

il tutto viene prima eseguito e poi viene stampato....anche se si chiedesse di fare il print della funzione shell_exec con dentro il comando non cambierebbe niente. Stesso risultato con exec(), system(), passthru() .
Ho provato con popen()...tipo questo:

<?php
$handle = popen('ping -c10 x.x.x.x', 'r');
echo "'$handle'; " . gettype($handle) . "\n";
echo $read = fread($handle, 2096);
echo $read = fread($handle, 2096);
?>

Se eseguo il php su shell lo vedo come se eseguissi su shell il ping, ma se lo visualizzo in pagina web vedo solo l'output finale. :confused:
Qualcuno conosce un modo per avere questo output in tempo reale su pagina web?
Inserisco un url, per rendere chiaro ciò di cui ho bisogno, provate a fare un ping da questa pagina e osservate come viene visualizzato:

http://steadfast.net/corporate/lookingglass.php#lghead

Ciao
Grazie a tutti!
 
Prova così:

PHP:
<?php
$handle = popen('ping -c10 x.x.x.x', 'r');

while( $read = fread($handle, 2096)) {
	echo str_replace("\n", "<br/>", $read);
	ob_flush();
	flush();
}
?>

ed assicurati che il webserver non utilizzi moduli che impongano il caching dell'output (es. il mod_deflate)
 
Ho provato

Ho provato ma il risultato è lo stesso, se lo eseguo da linea di comando invece il risultato è quello che vorremmo....dunque ho provato a mandarlo sul web come cgi...il risultato è diverso sul web, ricevo sempre l'output finale alla fine dell'esecuzione del comando! :confused:
Ho dimenticato di aggiungere che ho controllato anche per eventuali moduli che possono fare catching dell'output ma non ho trovato nulla del genere.
 
Ultima modifica:

Discussioni simili