Umleitungsfehler umgehen

visiondpc

Erfahrenes Mitglied
Hallo,

ich arbeite momentan an einem Warenwirtschaftssystem für einen Auto-Ersatzteil-Händler.
Der gute Mann hat in seiner Datenbank gegenwärtig ca. 400.000 Artikel. Tendenz steigend.
Jetzt sitze ich grade an einem Skript zum Import neuer Artikellisten.
Das Problem:
Jeder neue Artikel muss mit den vorhandenen Artikeln verglichen werden ob er oder ein vergleichbarer Artikel schon im System vorhanden ist und dann wird je nach Situation ein INSERT oder UPDATE ausgeführt.
Das ganze ist natürlich bei Importlisten von ca. 20.000 Artikeln extrem zeitintensiv.
Um Laufzeitfehler zu vermeiden habe ich mir folgendes ausgedacht:
Ich lade die Liste hoch, und arbeite sie blockweise ab. Nach 100 Artikeln wird die Seite mittels header("location: ...") neu aufgerufen und die aktuelle Listenposition übergeben.
Das Ergebniss ist nicht verwunderlich. Nach 20 Reloads kommt die Meldung
Fehler: Umleitungsfehler
Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann.
Was aber falsch ist, das ja jedesmal eine andere get-Variable übergeben wird.
Ich habe schon versuch 2 Seiten abwechselnd aufzurufen aber das brachte mich auch nicht weiter.
Gibt es eine Möglichkeit diese Fehlermeldung zu umgehen und dem Browser zu sagen das es keine Endlosschleife ist
 
Zuletzt bearbeitet:
Ich würde max_execution_time auf 0 setzen, nach jedem Datensatz einen flush(); und eine Ausgabe machen und das script komplett durchlaufen lassen.

Aber grundsätzlich gehe ich davon aus das an deinem script irgendwas falsch ist.

PHP:
set_time_limit(0);
 
set_time_limit() und max_execution_time hatte ich als erstes versucht. Aber auch da sind irgendwo Grenzen erreicht.
3000 Datensätze krieg ich damit durch. aber dann ist Schluss.
 
der Location header sendet einen Statuscode 302 (Moved Temporarily).
Wenn der nun aber 20 mal kommt, dann erkennt das der Browser. Die URL ist ja auch immer gleich bis auf die GET Parameter.

Versuche vor dem header("Location: ....");
noch ein
PHP:
header('HTTP/1.1 202 Accepted');
oder ein
PHP:
header('HTTP/1.1 200 OK');

Der Location header benötigt aber eigentlich ein 3xx header, daher auch mal

PHP:
header('HTTP/1.1 303 See Other');
header('HTTP/1.1 307 Temporary Redirect');
 
Das hat leider auch nicht geholfen.
Aber ich glaube ich hab jetzt die Lösung. Nach 15 Reloads rufe ich ein HTML-Formular auf, das sich via JavaScript selber abschickt.
Das hat den Vorteil, dass ich sogar Statusmeldungen ausgeben kann.

Trotzdem danke für die Hilfe.

Falls aber noch jemand eine sauberere Lösung kennt würde ich mich freuen.
 
Zurück