php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 26-01-2006, 15:01
jonetsu
 Newbie
Links : Onlinestatus : jonetsu ist offline
Registriert seit: Jan 2006
Ort: Oberhausen
Beiträge: 9
jonetsu ist zur Zeit noch ein unbeschriebenes Blatt
Standard CSV mit über 30.000 Zeilen einlesen

Hallo

Mein Problem ist folgendes.

Ich bekomm täglich eine CSV Datei mit über 30.000 Zeilen. Diese muss in eine MySQL Datenbank übertragen werden. Wobei schon vorhandene Datensätze aktualisiert und neue erstellt werden.

Das läuft auch weiter ohne Probleme.

Doch nach ca. 10.000 Zeilen ist schluss, ohne weitere Fehlermeldung. Ich denke mal das es an einem Timeout liegt.

Derzeit teile ich die CSV in drei bis vier Teile und umgehe dieses Problem. Doch das ist keine ideale Lösung.

Wie kann ich erreichen das ich die CSV komplet in einem rutsch abarbeiten kann?
Mit Zitat antworten
  #2 (permalink)  
Alt 26-01-2006, 15:23
flo_urlaub
 Newbie
Links : Onlinestatus : flo_urlaub ist offline
Registriert seit: Dec 2005
Beiträge: 19
flo_urlaub ist zur Zeit noch ein unbeschriebenes Blatt
Standard

wie ließt du den die datei ein?

ich machs mit:
PHP-Code:

$lines 
file ($allg[adressdatei]);
foreach (
$lines as $line_num => $line) {
$spalte explode(";"$line);
...

Mit Zitat antworten
  #3 (permalink)  
Alt 26-01-2006, 15:34
jonetsu
 Newbie
Links : Onlinestatus : jonetsu ist offline
Registriert seit: Jan 2006
Ort: Oberhausen
Beiträge: 9
jonetsu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Da ich jede Zeilen abarbeiten muss lese ich über fgetcsv ein

PHP-Code:
while(($row fgetcsv ($daten,$dateigroesse,';'))!=false
Und in der Schleife durchlaufe ich dann alle Operationen.

Wie z.B. Abgleich mit der Datenbank ob der Datensatz schon existiert etc..

Dann werden die Daten in der DB aktualisiert oder neu eingetragen.
Die DB verfügt über mehrere Tabellen welche sowohl bei den Abfragen als auch beim schreiben angesteuert werden.
Mit Zitat antworten
  #4 (permalink)  
Alt 26-01-2006, 15:45
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich vermute das die Ausführungszeit deiner Scripte einfach zu kurz ist.

http://de.php.net/manual/de/function.set-time-limit.php
Mit Zitat antworten
  #5 (permalink)  
Alt 26-01-2006, 16:08
jonetsu
 Newbie
Links : Onlinestatus : jonetsu ist offline
Registriert seit: Jan 2006
Ort: Oberhausen
Beiträge: 9
jonetsu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nehmen wir an ich könnte die set_time_limit aufgrund der Einstellungen nicht nutzen. (Muss es eventuell noch an einen anderen Server anpassen).

Was dann?
Mit Zitat antworten
  #6 (permalink)  
Alt 26-01-2006, 16:35
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Aus: http://de2.php.net/manual/de/functio...time-limit.php

---
Achtung: Wenn PHP im Safemode läuft, hat set_time_limit() keinen Effekt. Die einzige Möglichkeit, dies zu umgehen, ist den Safemode im configuration file auszuschalten.
---


Wenn die Ausführungszeit dein Problem ist, dann solltest du darüber nachdenken das Script auf einem Server laufen zu lassen der nicht im Safe-Mode ist, oder entsprechend konfiguriert.


Liegt es denn überhaupt an der ausführungszeit?
Mit Zitat antworten
  #7 (permalink)  
Alt 26-01-2006, 16:53
jonetsu
 Newbie
Links : Onlinestatus : jonetsu ist offline
Registriert seit: Jan 2006
Ort: Oberhausen
Beiträge: 9
jonetsu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich denke schon das es ein timeout ist. Aber sicher kann ich es nicht sagen.
Das Script läuft einige Minuten.

Und gibt mir zur Kontrolle immer die aktuelle Zeilennummer aus. Doch nach ca. 10.000 Zeilen ist dann halt schluss.

Gibt es eine möglichkeit mit der ich die csv quasi intern zerlegen kann und das sich das Script dann nach einer Gewissen menge Zeilen selbst wieder aufruft und dort weitermacht wo es aufgehört hat?

Das müsste doch ein eventuelles timeout umgehen oder?
Mit Zitat antworten
  #8 (permalink)  
Alt 26-01-2006, 17:36
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hast du das Time Limit mal auf 10Minuten gesetzt und geschaut, ob es dann durchläuft?
Mit Zitat antworten
  #9 (permalink)  
Alt 26-01-2006, 17:47
jonetsu
 Newbie
Links : Onlinestatus : jonetsu ist offline
Registriert seit: Jan 2006
Ort: Oberhausen
Beiträge: 9
jonetsu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Es läuft derzeit auf angemietetem Webspace.

Und ich kenne mich mit der Configuration von PHP nicht wirklich aus, aber ich kann den doch in dem Falle nicht selbst abändern - oder?
Mit Zitat antworten
  #10 (permalink)  
Alt 26-01-2006, 17:48
prego
 PHP Senior
Links : Onlinestatus : prego ist offline
Registriert seit: May 2005
Ort: Herborn
Beiträge: 1.609
prego ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Bist du meinem Link zu der Funktion set_time_limit() gefolgt? 4 Posts weiter oben?
Mit Zitat antworten
  #11 (permalink)  
Alt 26-01-2006, 19:18
jonetsu
 Newbie
Links : Onlinestatus : jonetsu ist offline
Registriert seit: Jan 2006
Ort: Oberhausen
Beiträge: 9
jonetsu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ja ich habe mir die Funktionsweise von set_time_limit() angeschaut warum?
Mit Zitat antworten
  #12 (permalink)  
Alt 30-01-2006, 08:00
DSB
 Banned
Links : Onlinestatus : DSB ist offline
Registriert seit: Dec 2002
Ort: Hamburg
Beiträge: 374
DSB ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das Timeout kann man auch durch einen Selbstaufruf überlisten.
Man muss sich nur merken an welcher Stelle der DAtei man war.

Ungefähr so klappts:
PHP-Code:
<?php
$offset
=(empty($_GET['offset'])) ? 0$_GET['offset'];
$dateiname="./import/data.csv";

$f=fopen($dateiname,"r");
if (
$f===false) die("Konnte Datei nicht finden oder öffnen!");
fseek($f,$offset);
$feld=fgetcsv($f,4096,";"); // Feldtrenner
$fertig=false;

if (!
feof($f)) 
{
    
$offset=ftell($f); // merken wie weit die Abbarbeitung vorangeschritten ist
    // Daten prüfen und gegebenenfalls verändern - $feld[0]=erste Spalte aus der CSV-Datei
    
if ($feld[0]==""$feld[0]=0;
    ...
    
// Jetzt Query basteln und dann Eintrag in die Datenbank
    
...
}
else 
$fertig=true;
fclose($f);    

if (
$fertig) die("<br>Import beendet.<br><br>Ende der Datei");

if (!
$fertig)
{
    echo 
"<script =\"javascript\">self.location=\"$PHP_SELF?offset=".$offset;
    echo 
"\"</script>";
}
?>
Jetzt noch das Auslesen in eine Schleife packen und hübsch gegen eine Maxanzahl von Einträgen oder die vergangene Zeit gegen die max_execution_time prüfen und fertig ist die universal CSV-Importroutine, die auf jedem Server läuft.

Geändert von DSB (30-01-2006 um 08:03 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 03-02-2006, 19:01
jonetsu
 Newbie
Links : Onlinestatus : jonetsu ist offline
Registriert seit: Jan 2006
Ort: Oberhausen
Beiträge: 9
jonetsu ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vielen Dank das ist genau was ich gesucht habe!!!!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

Kundengewinnung und Kundenbindung
Kundengewinnung und KundenbindungVertrieb läuft doch immer persönlich. Das funktioniert nicht mit dem Internet! Wirklich?

24.09.2021 | Berni

Projektmanagement Damals und Heute
Projektmanagement Damals und HeuteWerfen Sie einen Blick auf das, was sich verändert hat, und entdecken Sie, wo die Zukunft dieses Gebietes hinsteuert.

18.01.2021 | Berni


 

Aktuelle PHP Scripte

Simple Forum PHP ansehen Simple Forum PHP

If you need simple forum or discussion on your website, then you've come to the right place. Simple Forum PHP is a script that is very easy to install and administer.

28.08.2021 nevenov | Kategorie: PHP/ Forum PHP Software
Formmailer Bootstrap 4

Mit dem Formmailer kann man sich eMails über seine Seite zukommen lassen.

08.07.2021 arne-home | Kategorie: PHP/ Formular
Fehlerseite Bootstrap 4

Bei Aufruf einer nicht existierenden Seite, teilen Sie Besuchern mit einer eigenen Fehlerseite mit, dass die gewünschte Seite nicht gefunden wurde. Die eigene Fehlerseite sollte dasselbe Design wie die Website haben. Zudem sollte ein Link zur Startseite a

04.07.2021 arne-home | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:26 Uhr.