php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.09.2008, 17:05  
Neuer Benutzer
 
Registriert seit: 03.09.2008
Beiträge: 4
kaischum befindet sich auf einem aufstrebenden Ast
Standard Performance-Problem / Skript bricht ab

Hallo!

folgendes Skript liest eine CSV-Datei aus und schreibt die Daten in eine MySQL-Tabelle. Leider habe ich das Problem, dass bei größeren CSV-Dateien (>800 kb) das Skript in der While-Schleife "while ($i<count($DataField[0])){", in der der SQL-Befehl generiert wird, stecken bleibt.
Das Skript ist bei 1und1 gehostet (wg. php.ini-Einstellungen).

Ich hoffe nun auf Tipps und Ideen, wie ich das Skript optimieren kann, damit es nicht mehr abbricht.

PHP-Code:
<?
error_reporting
(E_ALL);
         
$Dateizeiger fopen("Data/$tabelle_gewaehlt/".$_POST['DatenDatei'], "r");
         
$z=0;
         
$ze=0;
         while((
$Daten fgetcsv($Dateizeiger9999";")) !== FALSE)
         {
             
$AnzahlSpalten count($Daten);
             
$sp=0;
             for(
$s 0$s $AnzahlSpalten-1$s++)
             {
                 if(
$s==0){
                         
$TimeField[] = $Daten[$s];
                 }
                 else if(
$s>&& (strpos($Daten[$s],".")!==false)){
                         
//Schreibt alle Spalten der Zeile in Array
                         
$DataField[$ze][$sp] =  $Daten[$s];
                         
$sp++;
                 }
             }
             if (
$s>0){
                 
$ze++;
             }
             
$z++;
         }
         
fclose($Dateizeiger);
         
// vorhandene Spalten der Datenbank einlesen
         
$sql "SHOW COLUMNS FROM `$tabelle_gewaehlt`";
         
$n=0;
         if (
$res mysql_query($sql)){
             while (
$data mysql_fetch_array($res)){
                 
$felder[$n] = $data['Field'];
                 
$n++;
             }
         }

         
//Anzahl der bestehenden Zeilen auslesen, um Zellnummer weitführen zu können
         
$sql "SELECT Count(*) AS Zellzahl FROM `$tabelle_gewaehlt`";
         if (
$res mysql_query($sql)){
                 while (
$data mysql_fetch_array($res)){
                        
$zellzahl $data['Zellzahl'];
                 }
         }

         
// Daten in DB schreiben
         
$sql "INSERT INTO `$tabelle_gewaehlt` (";
         for (
$n=0$n<count($felder); $n++){
                 
$sql .= "`$felder[$n]`, ";
         }
         
$sql substr($sql0, -2);
         
$asdf $n;
         
$sql .= ") VALUES (";
         
$i=0;
         
$zellnummer=$zellzahl+1;
         while (
$i<count($DataField[0])){
                 
$sql .= "NULL, '$zellnummer', '', '', '', '', '', ";
                 for (
$n=0$n<count($DataField); $n++){
                        
$sql .= $DataField[$n][$i].", ";
                 }
                 
$sql substr($sql0, -2);
                 
$sql .= "), (";
                 
$zellnummer++;
                 
$i++;
         }
         
$sql substr($sql0, -3);
         
$sql .= ";";
         echo 
$sql;
         if (
mysql_query($sql)){
                 echo 
"Daten erfolgreich in Tabelle $tabelle_gewaehlt eingelesen!<br><br>";
         }
         else {
         die(
mysql_error().'<hr />'$sql .'<hr />');
         echo 
"Fehler beim Einlesen der Daten!<br><br>$sql";}
?>
Vielen Dank und viele Grüße,

Kai
kaischum ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.09.2008, 17:57  
Erfahrener Benutzer
 
Benutzerbild von DER_Brain
 
Registriert seit: 18.04.2005
Beiträge: 1.541
PHP-Kenntnisse:
Fortgeschritten
DER_Brain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

naja, eine möglichkeit wäre die max_execution_time zu erhöhen..

schau mal ob 1und1 dir ini_set() erlaubt...:


PHP-Code:
ini_set("max_execution_time",300); 

ansonsten vlt. die datei aufsplitten auf kleinere..?


lg
Andi
DER_Brain ist offline   Mit Zitat antworten
Alt 05.09.2008, 18:13  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Ich würde mir das ja ansehen, aber Dein Coding-Stil ist grausam. Warum benutzt Du nicht mal ab und an ne Leerzeile? Sprechende Variablennamen, einheitliche Syntaxsprache? Tausen .= Operatoren sind nicht nachvollziehbar.

$sql .= ";";
Das solltest Du weglassen und dafür lieber mal das letzte INSERT Statenment mit ) schließen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 05.09.2008, 19:30  
Neuer Benutzer
 
Registriert seit: 03.09.2008
Beiträge: 4
kaischum befindet sich auf einem aufstrebenden Ast
Standard

Erstmal danke für Eure Beiträge!

@ DER_Brain: die max_execution_time ist auf 50000 eingestellt. Daran liegt es dann wohl eher nicht, oder? Das Skript bricht außerdem schon nach ca. 5 Sekunden ab.

@ nikosch: ich werd versuchen, deine Kritik beim weiteren Coden zu beachten. Mir fehlt eben die Routine, um in diesen Dingen immer konsequent zu sein. Wie ich die $sql .= vermeiden soll, weiß ich allerdings nicht. Je nach Anzahl der Spalten in der DB wird der SQL-Befehl doch unterschiedlich oft verlängert, also muss ich mir den in mehreren Schritten zusammenbauen. Hast du eine bessere Idee, die ohne .= auskommt?
Der INSERT-Befehl wird geschlossen. Nämlich dadurch, dass nach der while-Schleife die letzte offene Klammer und das Komma abgeschnitten wird. ";" ist natürlich überflüssig am Schluss - danke für den Hinweis.
kaischum ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Timestamp problem phrain PHP Tipps 2008 2 04.04.2008 09:41
Problem eine Datenbank/Tabelle anzulegen der Seb Datenbanken 5 16.03.2008 14:35
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
Skript bricht ab - ohne Fehlermeldung PHP-Fortgeschrittene 10 11.10.2005 22:19
ImagecreateFromPng bricht Skript ab ohne Fehlermeldung DonTermi PHP-Fortgeschrittene 5 08.09.2005 08:53
Problem mit &amp; beim XML - Parsen PHP Tipps 2005-2 1 27.08.2005 14:08
Skript &amp;amp;amp;quot;tarnen&amp;amp;amp;quot;? Off-Topic Diskussionen 17 07.08.2005 19:42
[Erledigt] Problem mit Backslash Patrick Schwarz PHP Tipps 2005-2 5 26.07.2005 09:54
[Erledigt] Problem mit User/Group: nobody(99)/99 Server, Hosting und Workstations 3 09.07.2005 15:31
[Erledigt] File download &gt; kleines Problem PHP Tipps 2005 3 11.05.2005 23:11
imap problem: E-Mails mit Anlagen PHP Tipps 2005 1 05.05.2005 22:35
Javascript - CountUP Skript zählt falsch.. Chr!s HTML, Usability und Barrierefreiheit 0 28.03.2005 14:32
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
Problem beim Upload/Verarbeiten von Binaries PHP-Fortgeschrittene 0 10.08.2004 06:09
Ordner per Skript erstellen --> Rechte Problem PHP Tipps 2004 2 06.07.2004 14:19

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
fgetcsv bricht ab, batch script bricht bei for schleife ab, 1und1 php script bricht ab, php insert mssql bricht nach einer weile ab, php insert bricht nach einer weile ab, 1und1 script 10 sec bricht ab, php befehl bricht html ab, 1und1 bricht sql ab, skript bricht nach 30 sec ab 1und1, sql download bricht ab, fgetcsv 2 schritten, phpmailer script bricht ab, php bricht bei operator ab, sql file download bricht ab, php bricht nach erstem befehl ab, show columns 1und1, datei hochladen bricht nach 30 sekunden ab, phpmailer bricht ab, http://www.php.de/datenbanken/47208-performance-problem-skript-bricht-ab.html, 1und1 php insert in die db bricht ab

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:24 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum