2011-01-11 6 views
1

Ich verwende PHP SOAP und die Schleife läuft mit 10 Iterationen. Das Problem, das ich habe, ist, dass es nicht ausgegeben wird, bis die Schleife abgeschlossen ist, wobei jede Ausgabe auf einmal angezeigt wird.
Wie kann ich es einzeln ausgeben lassen, während es durch die Schleife verarbeitet, anstatt alles auf einmal zu machen, nachdem es die ganzen 10 Schleifen vervollständigt hat?Die Ausgangsschleife einzeln nacheinander und nicht auf einmal?

<?php 

$loops = 0; // set loops to 0 

// connection credentials and settings 
$location = 'https://theconsole.com/'; 
$wsdl = $location.'?wsdl'; 
$username = 'user'; 
$password = 'pass'; 

// include the console and client classes 
include "class_console.php"; 
include "class_client.php"; 

// create a client resource/connection 
$client = new Client($location, $wsdl, $username, $password); 

while ($loops < 10) 
    { 
    $dostuff; 
    $echo "It has done: " .$stuff; // display output 
    ob_end_flush(); ob_flush(); flush(); ob_start(); // added as per comments below - still not working 
    } 
?> 

Vielen Dank!

Antwort

1

Werfen Sie einen Blick auf flush

+0

Aktualisierte Frage, immer noch nicht funktioniert :( – Dov

2

Versuchen flush() Befehl, ob_flush() auch wenn mit Ausgabepufferung Umgang

EDIT: scheint mit dem sleep() Befehl ein Problem zu sein, wenn Sie in den Kommentaren lesen (auch die dev ones) zeigt an, dass, wenn sleep in einem Skript aufgerufen wird, nichts ausgegeben wird, bevor es ausgeführt wurde. Wenn Sie Sleep-Anrufe wiederholen, müssen Sie bis zum Ende der Schleife warten.

Lesen Sie den Kommentar „mohd in Bahrain dot Bz 16-Dec-2009 09.12“ diese Methode funktioniert, aber Sie haben die Puffer jedes Mal :(.

+0

@Viper_Sb: Aktualisierte Frage, immer noch nicht funktioniert :( – Dov

+0

@Dov ist Ihre eingeschlossenen Klassen mit jeder Art von Frameworks? Zend Cake etc ...? Eine Art der Pufferung findet statt Sie müssen Ihre Seite in einem zweiten und dritten Browser versuchen, da es Antiviren gibt, die Toolbars/Addons installieren, die Pufferung durchführen und/oder HTTP-Fehlercodes übernehmen (zB 500 400) –

+0

@Viper_Sb: Beide Klassen verwenden nur öffentliche Funktionen.Ich habe versucht in FF, IE und Chrome mit Addons deaktiviert.Noch kein Glück:/ – Dov

0

Sie werden wahrscheinlich spülen müssen, um füllen() und/oder ob_flush() durch jede Iteration, wenn Sie möchten, dass jede Zeile so ausgegeben wird, wie Sie sie erhalten

Beachten Sie jedoch, dass dies nicht unbedingt garantiert, dass Sie jede Zeile erhalten, wie es wird verfügbar, da der Webserver möglicherweise auch eine eigene Pufferung durchführt.

+0

Aktualisierte Frage, immer noch nicht funktioniert :( – Dov

0

(Getestet unter IEx und Firefox)

<?php 
if (ob_get_level() == 0) ob_start(); 

for ($i = 0; $i<10; $i++){ 
     echo "<br> Line to show."; 
     echo str_pad('',4096)."\n"; 

     ob_flush(); 
     flush(); 
} 
echo "Done."; 
ob_end_flush(); 
?> 

Verwenden Sie diesen Code, das funktioniert für mich.

Verwandte Themen