Selbstaufrufendes PHP-Script

glatze

Grünschnabel
Hallo Allerseits,

ich verzweifle grad an dem Problem ein sich selbst aufrufendes PHP-Script zu stricken. Hintergrund: Ich habe eine Datenbank in die ich bestimmte informationen zu Bilddateien speichere. Bei der Verarbeitung von mehreren Bilder wird aber sehr schnell das timeout des Servers erreicht.

Diese Problematik habe ich nun schon öfters gelesen und als Lösung immer denselben Ansatz ein sich selbst aufrufendes Script zu schreiben. Klingt toll, funktioniert nur nicht (bei mir). Denn nach 15 oder 16 Durchgängen sagt Firefox "Umleitungsfehler: Die aufgerufene Website leitet die Anfrage so um, dass sie nie beendet werden kann."

was bitte kann ich tun?
Mein Script sieht folgendermassen aus:

PHP:
<?
$offset=$_GET["offset"];
$max=300;

if ($offset<$max)
{
$offset ++;
	header("Location: ".$_SERVER["PHP_SELF"]."?offset=".$offset);
}
echo $offset;
?>

Der Aufruf erfolgt über scriptname.php?offset=0 o.ä.

Wahrscheinlichbin ich nur Betriebsblind und sehe etwas ganz offensichtliches nicht. Bitte um Hilfe

Gruß ausm tal
Glatze
 
Vllt. liegt es an dem Leerzeichen zwischen $offset und ++:
PHP:
<?
$offset = is_numeric($_GET["offset"]) ? $_GET["offset"] : 0;
$max = 300;

if ($offset<$max)  {
  $offset++;
  header("Location: ".$_SERVER["PHP_SELF"]."?offset=".$offset);
}
echo $offset;
?>
Was planst du denn eigentlich da? Kannst du das nicht "eleganter" lösen.
 
Wenn der Browser meint, er drehe sich aufgrund einer Weiterleitungsendlosschleife im Kreis, kannst du nichts machen. Ob dies auf auf Meta-Weiterleitungen zutrifft, weiß ich nicht. Du könntest es aber einfach mal ausprobieren.
 
Also das offset ++; ist es sicher nicht .. hab ich aber auch schon probiert ....

Das Ding ist, ich möchte einfach mehrere Dateien in einem Verzeichniss, bearbeiten kopieren und Zusatzinfos in eine mysql Datenbank packen. Einzeln ist das kein Thema. Nur Bei mehreren abzuarbeitenden dateien kommt der Timeout . Ich finde es ausgesprochenen unelegant einfach das Timeout hoch zu setzen, daher der Ansatz über das Selbstaufrufende Script. Ich versteh halt inefach nicht wo mein Fehler liegt, andere haben Probeleme doch bereits änlich gelöst (siehe: http://www.tutorials.de/forum/php/2...ter-mehr-als-1500-gleichzeitig-versenden.html)
 
Ich hatte das Problem auch letztens und meine es lag daran, dass die Seite sozusagen nicht komplett geladen wird!
Als ich die Weiterleitung dann in JS gemacht habe, hat es funktioniert!
PHP:
<?
$offset = is_numeric($_GET["offset"]) ? $_GET["offset"] : 0;
$max = 300;

if ($offset<$max)  {
  $offset++;
  ?>
  <script type="text/javascript">
    window.onload = function() {
      window.document.location.href = '<?php echo $_SERVER["PHP_SELF"]; ?>?offset=<?php echo $offset; ?>';
    }
  </script>
  <?php
}
echo $offset;
?>
 
Hallo Operator_Jon :)

VIELEN DANK !!

das wars ... diese Version hat noch den Vorteil das, man den Status der Verarbeitung anzeigen lassen kann...

gruß
Olaf
 
Hallo,

nur mal am Rande, wenn die MaxAusführungsZeit der PHP.ini für nen Script zu niedrig angesetzt ist, kann man sie in der Regel im Script auch erhöhen. Das funktioniert dann einfach mit ini_set(); und erspart einem auch bei anderen Werten der Ini oft umständlichen Zusatzaufwand. Muss das selber oftmals bei großen Datenbankscripten anwenden.
War jetzt nur mal zur Vollständigkeit :)
 
Danke für diesen Beitrag und die Lösung von Operator_Jon.
Mit der JS-Weiterleitung funktioniert es hervorragend!


Wie müsste denn die Funktion ini_set definieren, um die max. Skriptlaufzeit zu erhöhen?
Man weiß oft ja nicht exakt, wie lange der Prozess dauern wird, wenn man bspw. einen Newsletter mit Dateianhang versendet.
Kann man dies im Vorfeld abfragen?

Gruß
 
Zurück