PHP flush () funktioniert anscheinend auf meinem Linux-Rechner, aber nicht auf meinem Windows-Rechner?

8

Ich versuche, mich mit der Funktion flush () von PHP für ein Projekt, das ich gerade mache, vertraut zu machen, schrieb ein paar Skripte selbst und lud sie auf meinen eigenen Webspace hoch; aber es schien, keiner von ihnen hat funktioniert. Ich habe das unten stehende von einem Kommentar zu PHP.net gelesen und es versucht:

%Vor%

Anscheinend hat das Skript STILL nicht funktioniert.

Ich las dann einen Kommentar, der sagte:

  

Wenn Sie ob_flush () und flush () aufrufen und den Puffer immer noch nicht löschen, kann das daran liegen, dass eine Antivirus-Software (Panda in diesem Fall) den Puffer speichert, bis die Seite geladen ist, bevor sie an den Browser gesendet wird / p>

Also habe ich mich dazu entschlossen, die Webseite auf einem Rechner mit Linux (Ubuntu 12.04) anzufordern, da dort keine Antivirensoftware installiert ist; und es hat perfekt funktioniert!

Ich habe keine Ahnung, ob das mit Antivirensoftware zu tun hat? Oder ein anderer seltsamer Mechanismus in Windows, der verhindert, dass flush () seinen beabsichtigten Zweck erreicht, ich benutze den gleichen Browser auf beiden Rechnern (Firefox 14.0.1), also bezweifle ich, dass es das sein kann.

Ich denke also, meine eigentliche Frage ist: Weiß jemand etwas über Anti-Virus-Software, die verhindert, dass flush () seinen beabsichtigten Zweck erreicht (weil ich anscheinend nichts online finde)? Und wenn ja, gibt es einen Weg, um es zu umgehen?

EDIT: Nur um klar zu machen, ich bin sicher, das ist NICHT Server-Seite, ich habe einen externen Webserver mit Linux, ich gehorte diese Skripte nicht lokal auf dem Linux oder Windows-Rechner.

EDIT2: Ich habe das in einem Freundeshaus auf dem Linux-Laptop versucht, das ich in meinem Haus funktionierte, seltsamerweise funktionierte der Löschcode auch nicht in ihrem Haus (stattdessen dauerte es ewig, bis alle geladen waren) kam auf einmal heraus), was merkwürdig ist, da es auf diesem Laptop in meinem Haus funktioniert, ich bin mir nicht sicher, ob Router irgendetwas mit der Funktion flush () zu tun haben (ich kann wirklich nichts darüber im Internet finden) denn das ist das Einzige, was mir einfällt, das könnte mich stören.

Sonst habe ich keine Fortschritte gemacht, um das alleine zu umgehen, das ist definitiv nicht mit dem Server-Ende zu tun, was merkwürdig ist, da die meisten Informationen, die ich zu finden scheint, der Server ist, der das Problem darstellt Die Funktion flush () funktioniert nicht: /

Zufälligerweise habe ich das auch auf einem PC versucht, auf dem Norton (statt AVG) bei mir zuhause läuft, es funktionierte aber nicht ganz 100%.

    
Sean 05.08.2012, 13:25
quelle

1 Antwort

4

Es gibt mehrere Dinge, die verhindern können, dass die Ausgabe sofort angezeigt wird, einschließlich:

  • Pufferung innerhalb von PHP (was flush verhindert)
  • Pufferung, um genügend Daten für die Komprimierung zu sammeln (wenn die Komprimierung aktiviert ist)
  • Pufferung auf dem Webserver (kann sich aus irgendeinem Grund dafür entscheiden)
  • Pufferung im Browser (Browser verwenden verschiedene Techniken, so dass das Laden von Seiten sich für den Endbenutzer "schnell anfühlt"; diese Techniken umfassen nicht immer die Anzeige von Inhalten, sobald diese verfügbar sind)

Da flush nicht alles auf dieser Liste kontrollieren kann, gibt es wirklich keine Garantie, dass sich Ihr Programm so verhält, wie Sie es erwarten.

All dies wird in den Anmerkungen zu flush :

erwähnt
  

Leert die Schreibpuffer von PHP und dem von PHP verwendeten Backend (CGI, Webserver usw.). Dies versucht, den gesamten Ausgang zu drücken   Weg zum Browser mit ein paar Vorbehalten.

     

flush () ist möglicherweise nicht in der Lage, das Pufferschema Ihres Webservers zu überschreiben, und hat keine Auswirkungen auf die clientseitige Pufferung in der   Browser. Es hat auch keinen Einfluss auf die Userspace-Ausgabepufferung von PHP   Mechanismus. Das bedeutet, dass Sie sowohl ob_flush () als auch aufrufen müssen   flush (), um die ob-Ausgabepuffer zu leeren, wenn Sie diese verwenden.

     

Mehrere Server, insbesondere unter Win32, werden die Ausgabe Ihres Skripts weiterhin puffern, bis sie beendet wird, bevor die Ergebnisse übertragen werden   zum Browser.

     

Server-Module für Apache wie mod_gzip können ihre eigenen Puffer verwenden, was dazu führt, dass flush () nicht dazu führt, dass Daten gesendet werden   sofort zum Kunden.

     

Sogar der Browser puffert seine Eingabe, bevor sie angezeigt wird. Netscape puffert beispielsweise Text, bis er ein Ende der Zeile erhält   oder der Anfang eines Tags, und es wird keine Tabellen bis zum    Das Tag der äußersten Tabelle wird angezeigt.

     

Einige Versionen von Microsoft Internet Explorer beginnen erst mit der Anzeige der Seite, nachdem sie 256 Byte ausgegeben haben, also Sie   Möglicherweise müssen Sie vor dem Spülen zusätzliche Leerzeichen senden, um diese zu erhalten   Browser zum Anzeigen der Seite.

    
Jon 05.08.2012 13:36
quelle

Tags und Links