2016-04-20 19 views
0

Ich benutze diesen PHP-Code in CLI und CGI-Modusletzte Zeile anstatt machen neue

Es wartet eine kurze Zeit, bevor die nächste Zeile zeigt, ich will nicht alle fünf auf einmal angezeigt werden, Ich möchte Line1 durch die nächste usw. für alle zehn Zeilen ersetzen.

Danke

if (!defined('STDOUT')) 
    define('STDOUT', null); 
if (!defined('STDERR')) 
    define('STDERR', null); 

function buffer($stream, $message) 
{ 
    if (php_sapi_name() == 'cli') 
    { 
     // CLI - output to given stream 
     fputs($stream, $message); 
    } 
    elseif (php_sapi_name() == 'cgi-fcgi' || ob_get_level()> 0) 
    { 
     // Web but output buffering is on - bypass it 
     $buffer = ob_get_clean(); 
     echo nl2br($message).str_pad('',4096); 
     flush(); 
     ob_start(); 
     echo $buffer; 
    } 
    else 
    { 
     // Web without output buffering 
     echo $message; 
     flush(); 
    } 
} 

for ($i = 0; $i<10; $i++) { 
    buffer(STDOUT, "Line" . $i . PHP_EOL); 
    sleep(1); 
} 
+0

Ich bin mir nicht sicher, was du meinst mit "Ich möchte example1 durch die nächste und so weiter für alle fünf ersetzen." –

+0

Wenn ich Sie richtig verstehe: Sie möchten mehrere Zeilen ausgeben, wollen diese aber nicht untereinander anzeigen, sondern die letzte Zeile durch die nächste ersetzen? Um das zu erreichen, kann dies nicht mit reinem PHP gemacht werden; Sie müssen Bildschirmsteuerbefehle in der Befehlszeile ausgeben (diese sind plattformabhängig) und müssen JavaScript oder AJAX in Webumgebungen verwenden oder die gesamte Seite oder einen Frame oder Iframe aktualisieren. – syck

+3

Mögliches Duplikat von [Using flush() ersetzt die letzte Zeile, anstatt eine neue in PHP zu erstellen] (http://stackoverflow.com/questions/14884902/using-flush-replace-last-line-rather-than-make-new -ein-in-php) – syck

Antwort

0

Ihre Zeilenende \r\n Bedeutung go to next line and return to start of line ist.
Sie benötigen \r Bedeutung return to start of line und Echo überschreibt Zeileninhalt.

Halten Sie dieses Szenario im Sinn:

echo "Hello, my name is JJ\r"; 
echo "Hello, it is me"; 

wird, die Ausgabe als

Hello, it is meisJJ 

echo nur hallte Menge von Symbolen ersetzen Rest unberührt bleiben. Ich schlage vor, ein wenig Leerstelle zum Ende des Echos hinzuzufügen

function output($message, $lineLength = 80) { 
    echo str_pad($message, $lineLength, ' ', STR_PAD_RIGHT); 
}