Für alle, die noch keine Profis in der PHP-Programmierung sind.
Auslöser für den Abbruch kann bei großen Datenvolumen (z.B. mehrere Millionen Sätze in der
logdb_backup.dta) das Überschreiten von
Max Execution Time bzw. in anderen Programmen auch
Memory Limit sein.
Häufig sind die
Error-Values für diese Zwecke ungünstig eingestellt und als Ergebnis sieht man nur eine leere Seite. Da auf den meisten externen Servern die Protokolldateien nicht öffentlich zugängig sind, ist die Ursache oft schwer erkennbar. Dann in fremden Programmstrukturen die Gründe und die richtigen Maßnahmen zu finden ist nicht einfach.
Eine erste einfache Hilfe kann die Ausgabe von Statusinformationen bei Schleifen-Verarbeitungen sein.
Eine wenig aufwendige Variante: jede Sekunde eine Meldung senden.
if(time()>=$x) {$x=time()+1; echo date('Y-m-d H:i:s').'<br>'; @flush();}Oder etwas rechenintensiver: jede Sekunde den aktuellen Durchlaufzähler ausgeben
$i++; if(time()>=$x) {$x=time()+1; echo date('Y-m-d H:i:s ').$i.'<br>'; @flush();}Zusätzlich kann wenn erforderlich mit
memory_get_usage() die Größe des momentan verwendeten Speichers angezeigt werden.
Durch z.B.
$x=time()+1; wird der Zeitintervall von einer Sekunde angegeben. Eventuell sind auch größere Abstände sinnvoll.
Häufiger als jede Sekunde sollte nichts ausgegeben werden, da sonst die Performance erheblich eingeschränkt wird und es ggf. auch Schwierigkeiten mit der Anzeige geben kann.
Konkretes Beispiel für repair.php
Code:...
while ( !FEOF ( $logfile ) )
{
$i++; if(time()>=$x) {$x=time()+5; echo date('Y-m-d H:i:s ').$i.'<br>'; @flush();}
//------------------------------------------------------------------------------
$logfile_entry = fgetcsv ( $logfile , 6000 , "|" );
...
Außerdem kann es sinnvoll sein, das Programm nicht über das Menü im Fenster sonder als Direktaufruf
.../config/repair.php auszuführen.