Timeout (Strato) beim DB-Eintrag aus CSV

Robert Steichele

Erfahrenes Mitglied
Ich habe eine CSV-Datei, in der ca. 1200 Einträge stehen. Die möchte ich auslesen und in eine neue Datenbank eintragen. Da eine eindeutige ID für jeden Datensatz anhand von aktuellem Datum und aktueller Uhrzeit generiert wird, habe ich zwischen jedem Datensatz eine Pause von 2 Sekunden eingebaut.
Leider bricht Strato jetzt nach ca. 1 Minute die Skriptausführung ab.
Gibt es eine Möglichkeit diese trotzdem eintutragen?
Habe mal gehört, man könne einen Teil des Skriptes in eine andere Datei auslagern die bei jeder Schleife benutzt wird, damit mit jeder Schleife die Timeoutzeit von vorn beginnt.

Gruß
Robert

Habe den Quellcode vergessen.

PHP:
<?    
  include("includes/checkadmin.php");

  include("includes/head.php");

  include("includes/navi.php");
  
  include("data.php");
?>
        
      <div id="content">
      
        <p class="u">CSV Import</p>
        
        
<?

      $handle = fopen ("alt.csv", "r");
      while($data = fgetcsv($handle, 1000, ";")) {
      
        $creator = "alte DB";
        $date = "21.11.2005";
        $category = "Reparatur extern";
        
        $id=date("y");
        $id.=date("m");
        $id.=date("d");
        $id.=date("His");
        
        $deleteticket = "<a href=\"deleteticket.php?deleteticket=" . $id . "\"><img src=\"bilder/delete.png\" alt=\"delete.png\" /></a>";
        $changeticket = "<a href=\"showticket.php?showticket=" . $id . "\"><img src=\"bilder/open.png\" alt=\"open.png\" /></a>";
        $taketicket = "<a href=\"taketicket.php?taketicket=" . $id . "\"><img src=\"bilder/take2.jpg\" alt=\"take.jpg\" /></a>";  


        $db=mysql_connect($server, $dbuser, $dbpwd)
          or die("<b>No Connection to Database-Server</b>");
        mysql_select_db($database)
          or die("<b>Error connecting to Database</b>");
        $request="INSERT INTO dbticket VALUES ('";
                                         $request.= $id . "', '";
  					                             $request.= $creator . "', '";
                                         $request.= $date . "', '";
                                         $request.= $data[0] . "', '";
                                         $request.= $data[2] . "', '";
                                         $request.= $data[3] . "', '";
                                         $request.= "" . "', '";
                                         $request.= "" . "', '";
                                         $request.= "" . "', '";
                                         $request.= "" . "', '";
                                         $request.= $data[1] . "', '";
                                         $request.= $data[4] . "', '";
                                         $request.= "" . "', '";
                                         $request.= $category . "', '";
                                         $request.= $data[5] . "', '";
                                         $request.= "" . "', '";
                                         $request.= "" . "', '";
                                         $request.= "" . "', '";
                                         $request.= "" . "', '";
                                         $request.= "" . "', '";
                                         $request.= "" . "', '";                                         
                                         $request.= $deleteticket . "', '";
                                         $request.= $changeticket . "', '";            
                                         $request.= $taketicket . "', '";                                       
                                         $request.= "";                                      
                                         $request.= "')";
        $result=mysql_query($request);
        mysql_close($db);
        
        sleep(2);
    
      }
    
      
      echo "</div>";


  include("includes/footer.php");
?>
 
Das Problem ist, dass dein Provider eine maximale Zeitdauer für PHP Skripte definiert hat. Die kann man aber austricksen, wenn man es in etwa so macht...

Du musst das Skript in kleine Häppchen teilen. Z.b. immer nur 100 Datensätze schreiben...

Dann gibst du eine HTML Seite aus, die im BODY-Tag einen onload="...." auf dein Skript macht. Dabei gibst du deinem Skript als Parameter mit, wo es weiter machen soll.

Durch die Tatsache, dass du immer nach 100 Datensätzen eine Ausgabe hast die dein Skript neu startet, kannst du den Upload ohne Probleme realisieren.

Ich hab sowas ähnliches mal gemacht, als ich 84.000 Datensätze errechnen lassen musste. Das hat bestimmt insgesamt 1h Skriptlaufzeit gehabt...

Was du auch noch versuchen kannst, um die 2 Sekunden zu sparen, ist den Key mit der Funktion microtime() zu erzeugen... Geht aber nicht überall ...
Oder du hängst an deinen Key noch einen Zahl via mt_rand() dran...
 
Zurück