Kann man eine Ausgabe während einer PHP Schleife machen?
davidp
- php
0 Rouven0 davidp0 Texter mit x0 davidp0 Texter mit x0 Texter mit x0 davidp
0 Tom
0 Peter Pan
0 Tom
Hi,
Ich möchte wissen, ob und wie man eine Ausgabe während einer PHP Schleife machen kann.
Ich habs noch nicht geschafft...
--
lg davidp
Hello,
Ich habs noch nicht geschafft...
du scheiterst woran??
while (1 == 1) {
echo "ich schreibe so lange, bis maximum execution time erreicht...";
}
MfG
Rouven
hi,
Ich habs noch nicht geschafft...
du scheiterst woran??
Ich brauch das ganze mit der Funktion sleep() und aus einer Datei lesen, da gehts dann nicht mehr:
while (1 == 1) {
$fp = fopen ('datei.txt', 'r' );
$inhalt = fread ($fp, filesize ('datei.txt') );
fclose ($fp);
echo $inhalt . '<br>';
sleep(2);
}
da gehts dann nicht mehr:
Und was genau bedutet das, wie äußert sich das?
while (1 == 1) {
$fp = fopen ('datei.txt', 'r' );
$inhalt = fread ($fp, filesize ('datei.txt') );
fclose ($fp);
echo $inhalt . '<br>';
sleep(2);
}
Ist es das was Du willst, immer wieder den ganzen Inhalt ausgeben, bis das script wegen timeoute abgebrochen wird?
Hi,
Ist es das was Du willst, immer wieder den ganzen Inhalt ausgeben, bis das script wegen timeoute abgebrochen wird?
eher nicht, nur ausgeben, wenn sich in der zeit was in der datei ändert
(so überprüfen:
if ($inhalt_alt != $inhalt || $inhalt_alt == "") { echo $inhalt; $inhalt_alt = $inhalt; };
)
Du willst ein script aufrufen, das eine Datei immer und immer wieder einließt und dann irgendwann, falls sich die Datei ändert oder das script mit timoute abgebrochen wird, ausgibt?
Das glaube ich nicht.
"oder das script mit timoute abgebrochen wird"
Das gehört natürlich ans Ende des Satzes.
Du willst ein script aufrufen, das eine Datei immer und immer wieder einließt und dann irgendwann, falls sich die Datei ändert oder das script mit timoute abgebrochen wird, ausgibt?
Das glaube ich nicht.
warum denn nicht?
Du willst ein script aufrufen, das eine Datei immer und immer wieder einließt und dann irgendwann, falls sich die Datei ändert oder das script mit timoute abgebrochen wird, ausgibt?
Das glaube ich nicht.
warum denn nicht?
Weil das etwas wäre, was man für kaum etwas verwenden kann und falls es doch für so einen Fall gedacht ist, wo man es verwenden kann, ist es eine reichlich schlechte Lösung.
Hello,
da gehts dann nicht mehr:
Und was genau bedutet das, wie äußert sich das?
while (1 == 1)
{
clearstatcache(); ## das wird hier notwednig sein, wenn die Größe der Datei sich
## während der Scriptlaufzeit ändert.
## [link:http://www.php.net/manual/de/function.clearstatcache.php]
$fp = fopen ('datei.txt', 'r' );
$inhalt = fread ($fp, filesize ('datei.txt') );
fclose ($fp);
echo $inhalt . '<br>';
sleep(2);
}
>
> Ist es das was Du willst, immer wieder den ganzen Inhalt ausgeben, bis das script wegen timeoute abgebrochen wird?
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg

--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
Hi!
Das:
while (1 == 1)
war nur die Demo einer Endlosschleife - da PHP-Scripte i.d.R. nicht so alt werden, kann man das abwarten..
Außerdem ist für dein Vorhaben fgets nicht dein Freund!
Wenn ich jetzt nix übersehen habe...
// Dieser PP-code ist ungetestet!!
// Datei zum lesen öffnen - $fp ist unser Handle
$fp = fopen ('datei.txt', 'r' );
// jetzt lesen wir bis zum Dateiende jede Zeile ein
// und speichern diese in $inhalt - max. 2kB
while ($inhalt = fgets($fp, 2048 ) ) {
// und geben jede Zeile aus
print $inhalt;
} // wer hat an der Uhr gedreht?
Et alors?
Die PHP-Dateisystem-Funktionen sind hier sehr gut beschrieben.
off:PP
Hi,
> $fp = fopen ('datei.txt', 'r' );
> while ($inhalt = fgets($fp, 2048 ) ) {
> print $inhalt;
> }
das funktioniert ja, aber mit dem Überprüfen (
if($inhalt!=$inhalt_alt) { print $inhalt . '<br>'; $inhalt_alt=$inhalt; }
) gibt er $inhalt erst am schluss (nach 30 sek) aus. warum?
echo $begrüßung;
Ich weiß ja nicht, warum du den Serverprozess künstlich verlangsamst, aber ...
[...] print $inhalt [...]
gibt er $inhalt erst am schluss (nach 30 sek) aus. warum?
... PHP sendet nicht sofort jedes Fitzel Daten, das es ausgeben soll, an den Client, sondern wartet erst bis sich ein Puffer gefüllt hat. Wenn du die Ausgabe sofort zum Client senden möchtest, kannst du mittels flush() bitten, den Puffer in Richtung Webserver zu entleeren. Einige Webserver machen dabei aber nicht mit. Auch einige Browser rendern nicht immer sofort jedes Datenpaket nach Empfang. Zusammengefasst hast du also PHP, den Webserver und den Client, die zwischenpuffern können, bevor eine Ausgabe sichtbar wird.
echo "$verabschiedung $name";
Hello,
Zusammengefasst hast du also PHP, den Webserver und den Client, die zwischenpuffern können, bevor eine Ausgabe sichtbar wird.
Und was ist mit "Wolfgang"?
Der sitzt doch auch noch auf der Leitung und kann ein paar Millisekunden brauchen, bis er alles gelesen hat.
Gemeint sind natürlich die Proxies und Hobs in der Übertragungsstrecke.
Die Datenpakete müssen also gar nicht in der Absendereihenfolge ankommen.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg

Die Datenpakete müssen also gar nicht in der Absendereihenfolge ankommen.
Falsche Baustelle. Wenn ich bei einer bestehenden TCP/IP-Verbindung vorn "XYZ" reinstecke, kommt hinten auch "XYZ" wieder raus, in der gleichen Reihenfolge. Dass die Daten zwischendurch ein wenig durcheinandergewirbelt werden (Reihenfolge vertauschen, etwas geht verloren, Dopplungen) ist für diesen Zusammenhang irrelevant.
Hello,
Die Datenpakete müssen also gar nicht in der Absendereihenfolge ankommen.
Falsche Baustelle. Wenn ich bei einer bestehenden TCP/IP-Verbindung vorn "XYZ" reinstecke, kommt hinten auch "XYZ" wieder raus, in der gleichen Reihenfolge. Dass die Daten zwischendurch ein wenig durcheinandergewirbelt werden (Reihenfolge vertauschen, etwas geht verloren, Dopplungen) ist für diesen Zusammenhang irrelevant.
Also doch richtige Baustelle: Solange X und Y nicht am Ziel angekommen sind, wird Z nicht ausgegeben. Wenn Wolfgang für X und Y etws länger braucht (Z hat er leider gar nicht zu sehen bekommen, weil das über eine andere Route gelaufen ist *g*) wird eben Z solange im TCP-Stack (oder wo es sonst zu landen hat) des Empfängers zwischengespeichert, bis sie auch eingetrudelt sind.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg

Hello,
Ich habs noch nicht geschafft...
du scheiterst woran??
while (1 == 1) {
echo "ich schreibe so lange, bis maximum execution time erreicht...";
}
Das kann aber ganz schön lange dauern, da die typischen 30 Sekunden reine Script-Laufzeit (Rechenzeit) sind und nicht die tatsächliche Zeitdifferenz zwischen Scriptstart und Scriptende.
Liebe Grüße aus Syburg bei Dortmund
Tom vom Berg

--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
deshalb vermutlich
echo "ich schreibe so lange, bis maximum execution time erreicht...";