2016-04-25 7 views
0

Ich versuche, Informationen am Front-End zu aktualisieren, während die Verarbeitung am Back-End läuft. Zu diesem Zweck verwende ich PHP-Flush-Funktion.Flush-Daten in komplexen PHP-Schleife

Mein Code ist

foreach ($csv_array as $row) { 
    $varint=$varint+1; 
    $curr_id = $row['Item']; 
    $toret['row_num']=$varint; 
    $toret['curr_url']=$curr_id; 

    echo json_encode($toret); 
    flush(); 

    $this->scrape_one_id($curr_id); 
    $value['arrow_id']=$curr_id; 
    $this->ahm->insert_new_id($curr_id); 
    $this->ahm->insert_current($value); 
} 

ich es in vielerlei Hinsicht versucht, aber es sendet nur nur erste Echo zurück und sendet Rest nach der vollständigen Ausführung beendet ist. Es funktioniert gut, wenn scrape_one_id Funktion kommentiert ist.

Einige der Methoden, die ich versucht habe, sind:

foreach ($csv_array as $row) { 
    $varint=$varint+1; 
    $curr_id = $row['Item']; 
    $toret['row_num']=$varint; 
    $toret['curr_url']=$curr_id; 

    echo json_encode($toret); 
    if(ob_get_level() > 0) ob_flush(); 
    $content = ob_get_clean(); 
    flush(); 
    if(ob_get_level() > 0) ob_clean(); 

    $this->scrape_one_id($curr_id); 
    $value['arrow_id']=$curr_id; 
    $this->ahm->insert_new_id($curr_id); 
    $this->ahm->insert_current($value); 
} 

Es ist auch gut funktioniert ohne scrape_one_id Funktion

Jede Art von Hilfe geschätzt wird.

+0

Nur ein paar Einschränkungen lesen Sie hier - http://php.net/manual/en/function.flush.php – Legionar

Antwort

0

Ich würde versuchen, ob_flush() da drin.

Edit: in Ihrem ersten Code, einfach ob_flush() nach Ihrem ersten Flush() und sehen, wie das funktioniert.

http://php.net/manual/en/function.flush.php

flush() nicht in der Lage sein, das Pufferschema Ihrer Web Server außer Kraft zu setzen, und es hat keine Auswirkungen auf dem clientseitige Pufferung im Browser. Es wirkt sich auch nicht auf den Userspace-Ausgangspufferspeicher von PHP aus. Das bedeutet, dass Sie sowohl ob_flush() als auch flush() aufrufen müssen, um die ob-Ausgabepuffer zu löschen, wenn Sie diese verwenden.

+0

Es gibt 'ob_flush()' ... – Legionar

+0

im zweiten Code, mit Bedingungen ... ich war über den ersten Quellcode sprechen. aktualisierte meine Antwort. – ZARk

+0

@ ZARk Ich habe das auch versucht. – SSMA

0

Ich möchte darauf hinweisen, dass es eine Funktion ob_flush und flush zu ersetzen ist. Wenn Sie oben auf der Seite ob_implicit_flush(true); einstellen, wird automatisch jedes Echo oder jeder Ausdruck gelöscht, den Sie im Rest des Skripts ausführen.

Beachten Sie, dass Sie immer noch eine Mindestmenge an Daten benötigen, um durch den Browserfilter zu kommen. Ich würde empfehlen, str_pad($text,4096); zu verwenden, da dies automatisch den Text mit Leerzeichen auf 4 KB verlängert, was die minimale Grenze bei der Verwendung von FireFox und Linux ist.

Sie sollten lesen manual (Vorbehalte) und auch Kommentare dort.

Ich hoffe, das hilft Ihnen.

+0

Ich habe 'ob_implicit_flush' auch versucht. Aber es gibt mir das gleiche Ergebnis. 1. Ausgabe ist in Ordnung, alle anderen sind bei Abschluss der Ausführung. – SSMA

+0

Haben Sie auch 'str_pad' verwendet? – Legionar

+0

ja, das habe ich auch probiert. Die erste Ausgabe ist wie 50 oder 60 Zeichen und es wird sofort gedruckt, aber alle anderen werden erst nach der vollständigen Ausführung ausgedruckt. – SSMA

Verwandte Themen