• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

CSV in mySQL importieren per Cronjob

noxx2

Neues Mitglied
Hallo,

ich habe auf meinem Server ne mySQL DB und auf dem Server eine CSV Datei die
über einen Cronjob importiert werden soll. Nun kenne ich leider nicht
den Befehl, evtl kann mir einer helfen.

*.csv liegt im Ordner \html

Das sind die Einstellungen für den manuellen Import

UTF-8
Erste 4 Zeilen überspringen
Tennzeichen Komma
CSV mit LOAD DATA

Danke für evtl Hilfe
 
Werbung:
Du brauchst der Einfachheit wegen ein Script, welches durch den cronjob aufgerufen wird. Das kann auch ein PHP-Script sein, welches das MySQL-Kommando einfach ausführt. Es könnte auch ein Bash- oder Perl-Script sein - ist völlig dir überlassen.

Wenn Du das hast und es beim manuellen Aufruf so funktioniert wie es soll, dann kannst Du den cronjob zusammensetzen. Wie das geht, hängt davon ab was bei deinem Hosting zur Verfügung steht. Manch Anbieter haben eine Weboberfläche dafür. Wenn Du direkt per SSH auf dem Server bist, solltest Du den cronjob auch dort anlegen können. Wie das geht steht im Manual von cronjob: Manual Page - crontab(5)
 
Werbung:
Wie gesagt wäre das einfacher, weil übersichtlicher. Wenn Du das SQL-Kommando bereits zur Hand hast, kannst Du es auch ganz ohne jede Programmiersprache machen indem Du das feststehende Kommando als cronjob-Befehl nimmst. Das könnte dann z.B. so etwas sein:

Code:
mysql -u nutzername datenbank -p=password < statement.sql

In der Datei statement.sql schreibst Du einzig das SQL-Kommando rein was Du ausführen willst.

Wenn Du doch PHP nutzen möchtest, schau dir z.B. diese Einführung an: PHP fr dich - mySQL und phpMyAdmin - danach solltest Du alle notwendigen Befehle mindestens 1 Mal gesehen haben.
 
gucke ich mir an. paralell habe ich ein php im netz entdeckt.
einzig das die ersten 4 zeilen übersprungen werden fehlt.

Code:
<?php

/********************************/
/* Code at http://legend.ws/blog/tips-tricks/csv-php-mysql-import/
/* Edit the entries below to reflect the appropriate values
/********************************/
$databasehost = "localhost";
$databasename = "test";
$databasetable = "sample";
$databaseusername ="test";
$databasepassword = "";
$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = "filename.csv";
/********************************/
/* Would you like to add an ampty field at the beginning of these records?
/* This is useful if you have a table with the first field being an auto_increment integer
/* and the csv file does not have such as empty field before the records.
/* Set 1 for yes and 0 for no. ATTENTION: don't set to 1 if you are not sure.
/* This can dump data in the wrong fields if this extra field does not exist in the table
/********************************/
$addauto = 0;
/********************************/
/* Would you like to save the mysql queries in a file? If yes set $save to 1.
/* Permission on the file should be set to 777. Either upload a sample file through ftp and
/* change the permissions, or execute at the prompt: touch output.sql && chmod 777 output.sql
/********************************/
$save = 1;
$outputfile = "output.sql";
/********************************/


if(!file_exists($csvfile)) {
    echo "File not found. Make sure you specified the correct path.\n";
    exit;
}

$file = fopen($csvfile,"r");

if(!$file) {
    echo "Error opening data file.\n";
    exit;
}

$size = filesize($csvfile);

if(!$size) {
    echo "File is empty.\n";
    exit;
}

$csvcontent = fread($file,$size);

fclose($file);

$con = @mysql_connect($databasehost,$databaseusername,$databasepassword) or die(mysql_error());
@mysql_select_db($databasename) or die(mysql_error());

$lines = 0;
$queries = "";
$linearray = array();

foreach(split($lineseparator,$csvcontent) as $line) {

    $lines++;

    $line = trim($line," \t");
    
    $line = str_replace("\r","",$line);
    
    /************************************
    This line escapes the special character. remove it if entries are already escaped in the csv file
    ************************************/
    $line = str_replace("'","\'",$line);
    /*************************************/
    
    $linearray = explode($fieldseparator,$line);
    
    $linemysql = implode("','",$linearray);
    
    if($addauto)
        $query = "insert into $databasetable values('','$linemysql');";
    else
        $query = "insert into $databasetable values('$linemysql');";
    
    $queries .= $query . "\n";

    @mysql_query($query);
}

@mysql_close($con);

if($save) {
    
    if(!is_writable($outputfile)) {
        echo "File is not writable, check permissions.\n";
    }
    
    else {
        $file2 = fopen($outputfile,"w");
        
        if(!$file2) {
            echo "Error writing to the output file.\n";
        }
        else {
            fwrite($file2,$queries);
            fclose($file2);
        }
    }
    
}
 
Werbung:
Zurück
Oben