![]() |
|
|||||||
| Newsgroup de.comp.lang.php.misc Sonstige Fragen zu Anwendung und Programmierung. |
![]() |
|
|
Themen-Optionen | Ansicht |
|
#1
|
|||
|
|||
|
Guten Tag miteinander
Ich möchte mir - konzeptionell - ein Beispiel erstellen, welches Rückgabewerte direkt ausgibt (klassischerweise im Browser) anstatt auf das Ende der Funktion zu warten. Beispiel: ------------ for ($i = 0; $i < 9; $i++ ) { echo "Counter: ".$i ; } Bei diesem Beispiel erhalte ich eine Ausgabe, sobald der Zähler 9 erreicht hat. Ziel: ------ Nun möchte ich bei jedem Durchlauf eine Ausgabe erhalten anstatt nur am Ende. Erste Überlegungen: ------------------------------ 1. Aufrufe per JavaScript Ich habe mir gedacht, dass ich die Funktionen über JavaScript (Ajax) aufrufen könnte. Allerdings sind mir die JS Konstrukte nicht geläufig und ich finde - gefühlsmässig - dass das der falsche Ansatz ist (ich mag die Programmiersprachen auch nicht mischen, wenn möglich). Ausgenommen, dass ich wohl nicht um einen "Container" für die Ausgabe im Browser herum komme. 2. Forken des Prozesses Ich halte diesen Ansatz für den "richtigeren". Ich könnte die Prozesse/ Funktien forken und die Ausgabe in ein Browserobjekt geben. Frage: ---------- Wie macht ihr das? Best practice? Meine Frage geht mir weniger um die Technische Umsetzung als eben, was denn der beste (oder bessere) Ansatz ist. Grüsse Oliver |
|
|
||||
|
||||
|
|
|
#2
|
|||
|
|||
|
Hallo!
Ich verstehe nicht, was Du willst, denn... > Beispiel: > ------------ > for ($i = 0; $i < 9; $i++ ) > { > echo "Counter: ".$i ; > } > > Bei diesem Beispiel erhalte ich eine Ausgabe, sobald der Zähler 9 > erreicht hat. Nein, so ist das nicht, sondern... > Ziel: > ------ > Nun möchte ich bei jedem Durchlauf eine Ausgabe erhalten anstatt nur > am Ende. So ist das. Normal. Standard. Grüße, Matthias |
|
#3
|
|||
|
|||
|
Matthias P. Wuerfl schrieb:
> Ich verstehe nicht, was Du willst, denn... Wer ist "Du"? >> Beispiel: >> ------------ >> for ($i = 0; $i < 9; $i++ ) >> { >> echo "Counter: ".$i ; >> } >> >> Bei diesem Beispiel erhalte ich eine Ausgabe, sobald der Zähler 9 >> erreicht hat. > > Nein, so ist das nicht, sondern... Ich vermute mal, dass der ominöse "Du" (dessen Posting vermutlich in meinem Filter hängen geblieben ist) seinen Code nicht per Copy&Paste übernommen hat, wie man es allgemein tut bzw. tun sollte, sondern abgetippt hat und dabei seinen Fehler, den wir nun nicht sehen können, automatisch korrigiert hat. Gruß. Claus |
|
#4
|
|||
|
|||
|
On 6 Nov., 16:42, Claus Reibenstein <4spamerso...*kabelmail.de> wrote:
> Matthias P. Wuerfl schrieb: > > > Ich verstehe nicht, was Du willst, denn... Ich möchte eine Unterhaltung über die Best-Practice des parallelen Ausführens und Anzeigen von Ausgaben an den Browser über Apache mit PHP mod. .... > > Ich vermute mal, dass der ominöse "Du" (dessen Posting vermutlich in > meinem Filter hängen geblieben ist) seinen Code nicht per Copy&Paste > übernommen hat, wie man es allgemein tut bzw. tun sollte, sondern > abgetippt hat und dabei seinen Fehler, den wir nun nicht sehen können, > automatisch korrigiert hat. > > Gruß. Claus Ich hoffe doch, es hat keinen Fehler in meinem FOR-Beispiel! ;-) Grüsse Oliver |
|
#5
|
|||
|
|||
|
On 6 Nov., 16:20, "Matthias P. Wuerfl" <matth...*wuerfl.com> wrote:
> Hallo! > > Ich verstehe nicht, was Du willst, denn... > ..... > > Bei diesem Beispiel erhalte ich eine Ausgabe, sobald der Zähler 9 > > erreicht hat. > > Nein, so ist das nicht, sondern... > > > Ziel: > > ------ > > Nun möchte ich bei jedem Durchlauf eine Ausgabe erhalten anstatt nur > > am Ende. > > So ist das. Normal. Standard. > > Grüße, Matthias Danke für Deine Antwort. Ja, da hast Du recht. Die Wahl meines Beispieles ist ungeschickt bzw. zu rudimentär. Neuer Anlauf: "FOR" wird ausgeführt, nachdem eine Clientseitige Anfrage gestartet wurde. Das Ergebnis erscheint nun erst, wenn die FOR-Funktion ihr Ende erreicht hat. Oder etwas näher an der Praxis: => HTML Formular => Request an Server => Ausführen Server Code seriel Resultat an Browser <= => HTML Formular => Request an Server => Ausführen Server Code parallel Resultat an Browser <= Resultat an Browser <= Resultat an Browser <= Abgesehend davon ist mir nicht das technische Vorgehen wichtig, sondern es interessiert mich, "wie das konzeptionell so im allgemeinen gemacht wird". Grüsse Oliver Grüsse Oliver |
|
#6
|
|||
|
|||
|
On 6 Nov., 14:37, Oliver <mykl...*gmail.com> wrote:
> Guten Tag miteinander .... > > Frage: > ---------- > Wie macht ihr das? Best practice? > Meine Frage geht mir weniger um die Technische Umsetzung als eben, was > denn der beste (oder bessere) Ansatz ist. > > Grüsse > Oliver Nun, ich beantworte meine Frage mal selber in der DU-Form. So, wie Du das willst geht das nicht. PHP die Prozesse im Apache nicht parallel laufen haben. Du kommst nicht drum herum, die Funktionen entweder extern auf zu rufen oder die Ausgaben im Hintergrund über (Text)Dateien (oder DB Einträge) zu lesen. Ja, das ist NICHT was Du wolltest weil man dann irgendwie die Ausgabe ja nicht weiss, an welchen Browser auf der Welt sie soll. Eine Lösung schlägt Julian über das Verwenden von Logdateien vor [1]. Wenn Du wirklich direkt eine serverseitige Rückgabe von Werten in der GUI willst, empfehle ich Dir, Dich in AJAX ein zu lesen. Die Ansätze (bzw Workarrounds), die Du dir überlegt hast, sind also schon richtig. Go ahead. Noch ein Tip: Google -> "php popen" Grüsse Oliver an Oliver [1] Gi-Blog http://blog.gi-project.de/2009/07/mu...eading-in-php/ |
|
#7
|
|||
|
|||
|
Oliver schrieb:
> "FOR" wird ausgeführt, nachdem eine Clientseitige Anfrage gestartet > wurde. > Das Ergebnis erscheint nun erst, wenn die FOR-Funktion ihr Ende > erreicht hat. Nein, währenddessen. > Oder etwas näher an der Praxis: > => HTML Formular => Request an Server => Ausführen Server Code seriel > Resultat an Browser <= Nein. > => HTML Formular => Request an Server => Ausführen Server Code > parallel > Resultat an Browser <= > Resultat an Browser <= > Resultat an Browser <= Ja. Grüße, Matthias |
|
#8
|
|||
|
|||
|
Matthias P. Wuerfl schrieb:
>> "FOR" wird ausgeführt, nachdem eine Clientseitige Anfrage gestartet >> wurde. >> Das Ergebnis erscheint nun erst, wenn die FOR-Funktion ihr Ende >> erreicht hat. > > Nein, währenddessen. Das kannst du doch einfach überprüfen: <?php // Leitung freipusten für IE while($i= 0 ; $i < 1024 ; $i++ ){ echo " "; } // Jetzt der eigentliche Test while($i= 0 ; $i<100 ;$i++){ // 100 mal sollte reichen, he? echo "foo $i"; // Ausgabe flush(); //Und weg damit zum Browser sleep(1); // Eine Sekunde warten } ?> Grüße, Matthias |
|
#9
|
|||
|
|||
|
On 7 Nov., 14:23, "Matthias P. Wuerfl" <matth...*wuerfl.com> wrote:
> Matthias P. Wuerfl schrieb: > > >> "FOR" wird ausgeführt, nachdem eine Clientseitige Anfrage gestartet > >> wurde. > >> Das Ergebnis erscheint nun erst, wenn die FOR-Funktion ihr Ende > >> erreicht hat. > > > Nein, währenddessen. > > Das kannst du doch einfach überprüfen: > > <?php > // Leitung freipusten für IE > while($i= 0 ; $i < 1024 ; $i++ ){ > * * * * echo " ";} > > // Jetzt der eigentliche Test > > while($i= 0 ; $i<100 ;$i++){ // 100 mal sollte reichen, he? > * * * * echo "foo $i"; // Ausgabe > * * * * flush(); //Und weg damit zum Browser > * * * * sleep(1); // Eine Sekunde warten > > } > > ?> > > Grüße, Matthias Hi Matthias Danke für Dein (sehr gutes) Beispiel. Meine Problemstellung war wohl falsch. Ahh; ich sehe, Du verwendest Flush. Ich werde damit einige Versuche tun. Neues Beispiel: --------------------------- for( $i= 0 ; $i<100 ; $i++) { // Ich mag die Klammern lieber unten echo "foo $i \n"; // Ausgabe MeineFunktion($i); flush(); //Und weg damit zum Browser } function MeineFunktion($i) { echo "Bar: $i \n"; } Frage: ---------- Wird auf die Funktion "MeineFunktion()" gewartet (sequentiell) oder wird die Funktion (im schnellsten Fall) 100 Mal gleichzeitig ausgeführt? Meinen Untersuchungen nach, wird die Funktion sequentuell abgearbeitet (allerdings habe ich FLUSH nich versucht); welche Konzepte verfolgt ihr um ein paralleles Abarbeiten zu erreichen? Grüsse Oliver Ziel: Die Funktion |
|
#10
|
|||
|
|||
|
....
> Frage: > ---------- > Wird auf die Funktion "MeineFunktion()" gewartet (sequentiell) oder > wird die Funktion (im schnellsten Fall) 100 Mal gleichzeitig > ausgeführt? > > Meinen Untersuchungen nach, wird die Funktion sequentuell abgearbeitet > (allerdings habe ich FLUSH nich versucht); welche Konzepte verfolgt > ihr um ein paralleles Abarbeiten zu erreichen? Sehe und lese: http://php.net/manual/de/function.flush.php > > Grüsse > Oliver > > Ziel: > Die Funktion- Zitierten Text ausblenden - Danke Mathias; ich denke ich sollte nun meine Idee umsetzen können: FLUSH war, was ich suchte. (und sonst komm ich wieder) ;-) Grüsse Oliver |
|
|
|
|
![]() |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Erstellt von | Forum | Antworten | Letzter Beitrag |
| Lastschrift-Rückgabe | Martin Schneider | Newsgroup de.etc.finanz.misc | 7 | 04-02-2008 01:30 PM |
| Rückgabe BC 100? | Martin Jungwirth | Newsgroup de.etc.bahn.tarif+service | 1 | 03-22-2008 06:22 PM |
| Rückgabe ausschliessen? | René Haar | Newsgroup de.soc.recht.misc | 9 | 10-27-2007 11:48 PM |
| Rückgabe von Referenzen | Timo Wagner | Newsgroup de.comp.lang.iso-c++ | 10 | 10-23-2007 06:03 PM |
| [Amazon] Rückgabe | Christian Buhtz | Newsgroup de.markt.misc | 3 | 09-15-2007 12:02 PM |