Wiederholte header()-weiterleitung

Strafi

Erfahrenes Mitglied
Hallo,


Ich habe mir ein script gebastelt was eine xml ausliest und daraus eine eignen formatierte CSV erstellt. Nun kommt es vor das ich eine XML haben kann die zb. 14MB groß ist und das Script die Verarbeitung nicht in der Scriptlaufzeit schafft.

Ich habe das halt so gelöst das er immer nur eine bestimmt anzahlen von Zeilen verarbeitet und sich mit header()-Funktion und der letzten Zeilenposition per GET selbst aufruft.

Ich glaube das die Headerweiterleitung nur 2x oder so geht, dann bekomm ich auf einmal ein 500

der headeraufruf sieht so aus

PHP:
//Verarbeitung ausgeblendet


 if(!isset($_GET['file'])) {
        $filename = "export_".date("Y-m-d-His",time());
    } else {
        $filename = $_GET['file'];
    }
    
    $fh = fopen($path.$filename.".csv","a");
    fwrite($fh,utf8_decode( $csv ) );
    fclose($fh);
   
    //$goto = "http://".$host."".$uri."/convert_group.php?reload=".$size."&anzahlzeilen=".$anzahlZeilen."&file=".$filename;
    $goto = "conv.php?reload=".$size."&anzahlzeilen=".$anzahlZeilen."&file=".$filename;
   
    if($bool) {
        
        header("Location: ".$goto);
        //exit();    
    
    } else {
        
        echo "Script fertig!";
    
    }


ich möchte einfach das sich das script immer wieder aufruft bis es fertig ist, aber anscheint geht das nur einmal oder so...


Jemand eine Idee?!



Grüße
 
Hi

500: Hast du in die Logs geschaut, was genau nicht passt?

Und nur falls das Verarbeitungsding etwas Richtung Browser ausgibt:
Dir ist schon klar, dass das durch die Umleitung wieder verschwindet?

Ein dritter Punkt:
Die Art von Kettenverarbeitung ist (auch ohne Ausgabe) vom Browser abhängig.
Wenn der Benutzer die Seite zumacht, bevor alles fertig ist,
geht die nächste Umleitung ins Leere -> Verarbeitung unvollständig.
 
ja des wegen frage ich ja ob jemand mir einen Ansatz für die Verarbeitung von größeren Dateien mit PHP geben kann? Nehmen wir mal den MySQL-Dumper, der schafft das doch auch.

Für das andere kann man mit ignore_user_abort() arbeiten...
 
Die saubere Lösung wäre ein von Apache lösgelöter Programmstart.
Setzt eine geeignete PHP-Intallation voraus (nicht bei allen Hostern vorhanden)
Sonst ist das schon Gemachte wahrscheinlich sinnvollste Lösung.

Mysqldumper: Ich habs nicht ausprobiert, aber der wird auch das Seitenschließproblem haben.
Wenn man ein volltändiges Backup will mus man die Seite offenlasen, bis es fertig ist.

ignore_user_abort: Unsinn.
Ich weiß zwar nicht, auf welches der Probleme du dich mit "das Andere" beziehst,
aber eine geschlossene Browserseite (und damit fehlende header-Reaktion)
kann man damit nicht umgehen.
Auch nicht das Verlorengehen vom aktuell angezeigten Seiteninhalt durch eine Umleitung.
 
Okay... Also den Server kann mit allem Konfigurieren was ich möchte. Seitenschließproblem ist evtl. gar nicht so schlimm, die Seite kann ja offen bleiben ist nur für ein morgendliches Backup aus einer WaWi in eine andere.

Bloß wenn ich die max_execution_time hoch dreh, dann brauch ich ja nicht die Verarbeitung mit den header(). Das komische ist ja, das ich mit standwerten 2 x mal den header() durchbekomme, von ca. 5 aufrufen. Stell ich max_execution_time() hoch, schafft header() auch alle 5 Aufrufe. Ich dachte der aufruf von header() start das Script neu und damit auch die Zeit zum ausführen****
 
Ich dachte der aufruf von header() start ...und damit auch die Zeit zum ausführen****
Ja, sollte eigentlich so sein.
Aber noch ist noch immer nicht bekannt, was den 500er eigentlich verursacht...

Zu der Sache mit dem Offenlassen und header:
Prinzipiell kein Problem, allerdings gibt es dann noch ein Risiko,
dass man von irgendwo anders ein Timeout aufgezwungen bekommt (Browser?, Proxy...)
 
Ja ich weiß es nicht warum 500. ich habe mit der console gearbeitet und sehe das es eine weile geht... seit ich max_execution_time hoch gesetzt habe läuft er durch. also denke ich das vielleicht ein script davor timeout läuft und des wegen vielleicht und so weiter... :(
 
Zurück