Methoden ob_start und ob_flush funktioniert nicht, warum?

Ich bin mit ob_start()/ob_flush(), hoffentlich geben Sie mir einige Fortschritte während einer langen import-operation.

Hier ist eine einfache Zusammenfassung von dem, was ich Tue:

<?php
ob_start ();

echo "Connecting to download Inventory file.<br>";
$conn = ftp_connect($ftp_site) or die("Could not connect");

echo "Logging into site download Inventory file.<br>";
ftp_login($conn,$ftp_username,$ftp_password) or die("Bad login credentials for ". $ftp_site);

echo "Changing directory on download Inventory file.<br>";
ftp_chdir($conn,"INV") or die("could not change directory to INV");

//     connection, local, remote, type, resume
$localname = "INV"."_".date("m")."_".date('d').".csv";
echo "Downloading Inventory file to:".$localname."<br>";

ob_flush();
flush();
sleep(5);

if (ftp_get($conn,$localname,"INV.csv",FTP_ASCII)) 
{
    echo "New Inventory File Downloaded<br>";
    $datapath = $localname;
    ftp_close($conn);
} else {
    ftp_close($conn);
    die("There was a problem downloading the Inventory file.");      
}
ob_flush();
flush();
sleep(5);

$csvfile = fopen($datapath, "r"); //open csv file
$x = 1;
//skip the header line
$line = fgetcsv($csvfile);
$y = (feof($csvfile) ? 2 : 5);
while ((!$debug) ? (!feof($csvfile)) : $x <= $y) {
    $x++;
    $line = fgetcsv($csvfile);
    //do a lot of import stuff here with $line
    ob_flush();
    flush();
    sleep(1);
}

fclose($csvfile); //important: close the file
ob_end_clean();

Jedoch wird nichts auf dem Bildschirm ausgegeben an alle.

Ich weiß, die Daten-Datei wird immer heruntergeladen, weil ich beobachte das Verzeichnis, in dem es platziert wird.

Weiß ich auch, dass der import ist passiert, was bedeutet, dass es in der while-Schleife, weil ich beobachten können, der DB und Datensätze eingefügt werden.

Irgendwelche Ideen, warum ich bin nicht immer auf dem Bildschirm ausgegeben?

  • Warum sind Sie mit output-buffering, wenn Sie ausdrücklich nicht wollen, um buffer-Ausgang und senden Sie es als die Seite verarbeitet wird?
  • Was meinst du? Ich möchte die Ausgabe der Sachen, wie es verarbeitet wird. Ist nicht das, was ich gesagt habe?
  • Output buffering ist für genau das Gegenteil, d.h. die Pufferung der Ausgabe und senden Sie alle auf einmal. Warum verwendest du es?
  • Ich war auf der Suche nach einem Weg zu senden, den Puffer BEI der Verarbeitung, anstatt zu warten, bis das gesamte Skript verarbeitet, wie PHP in der Regel nicht. Das wäre wie eine Art von Fortschritt-system. Darunter ob_flush() ausgeben soll, den Puffer auf das display sofort .vs warten, das Skript zu beenden. Sollte die Arbeit der Art wie dieses: drsoft.com/b/Your_very_own_PHP_progress_bar-73
  • "anstatt zu warten, bis das gesamte Skript verarbeitet, wie PHP in der Regel bedeutet" Eigentlich ist dies nicht, wie PHP funktioniert in der Regel. Output buffering, da @Matti sagte, wie man mit PHP auf diese Weise zu handeln. Wenn es sich schon handeln, dass der Weg für Sie ist, dann ist es, weil der webserver zu tun, Ihre eigenen buffering/Zwischenspeichern.
  • Haben Sie dieses Skript ausführen mit error-reporting eingeschaltet?
  • Ja, das error reporting ist auf und das script läuft derzeit auf meinem dev-server (localhost), so dass die Pufferung ist nicht ein Problem.

InformationsquelleAutor MB34 | 2010-05-14
Schreibe einen Kommentar