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($Dateizeiger, 9999, ";")) !== FALSE)
{
$AnzahlSpalten = count($Daten);
$sp=0;
for($s = 0; $s < $AnzahlSpalten-1; $s++)
{
if($s==0){
$TimeField[] = $Daten[$s];
}
else if($s>0 && (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($sql, 0, -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($sql, 0, -2);
$sql .= "), (";
$zellnummer++;
$i++;
}
$sql = substr($sql, 0, -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