mario_lorenz: während CURL Daten an Browser senden - timeout verhindern

Guten Tag,

mittels CURL will ich große Mengen CSV-Daten herunterladen. In PHP habe ich  die max_execution_time, CURLOPT_TIMEOUT und CURLOPT_CONNECTTIMEOUT ausreichend dimensioniert.

Das PHP-Script habe ich im Browser gestartet. Noch während des Downsloads bleibt es nach einer Weile stehen, weil keine Daten mehr an den Browser gesendet werden. Interessanterweise wird das CURL nicht abgebrochen, denn ich kann gleichzeitig via FTP sehen, wie der CSV-Download beendet wird und sogar noch ein im PHP-Script danach aufgerufenes shell_exec ausgeführt wird, um die gz-gepackte CSV zu entpacken. Alle Schritte danach werden aber nicht mehr abgearbeitet.

Ich habe schon versucht, den Browser via Javascript (settimeout-Funktion, die immer einen weiteren Punkt setzt...) auszutricksen.

Das hat aber nichts geholfen. Das Script bleibt stehen, das Javascript läuft weiter...

Nun meine Frage:

Gibt es eine Alternative, die neben einem "CURL", Daten an den Browser senden kann, um den Browsertimeout zu verhindern?
Oder eine Möglichkeit den CSV-Datenstrom häppchenweise zu übernehmen?

Vielen Dank für Eure Hilfe,

Mario Lorenz

PS: Browser Seamonkey 1.1.11, PHP5.2.6, libcurl/7.15.5

  1. Hi,

    Gibt es eine Alternative, die neben einem "CURL", Daten an den Browser senden kann, um den Browsertimeout zu verhindern?
    Oder eine Möglichkeit den CSV-Datenstrom häppchenweise zu übernehmen?

    schon per php cli probiert?

    Neben Curl gibt's ja noch die php eigenen Boardmittel wie zb fsockopen, file_get_contents.

    herzliche Grüße,
    Jonny 5

    1. Hallo Jonny 5,

      vielen Dank für Deine Antwort.

      Ich hatte bisher fsockopen nicht so richtig nutzen wollen. Schien mir irgendwie zu kompliziert. Aber das ist der richtige Weg! Ich nutze jetzt fsockopen zusammen mit einem URL-fgets und einem lokalem fputs und kann hier wirklich den Datenstrom häppchenweise entgegennehmen und gleich häppchenweise lokal speichern. Zwischendurch gibt es alle 1000 Durchläufe einen "." für den Browser ;)

      Also nochmals vielen Dank!

      Mario Lorenz