Hallo zusammen,
ich habe folgende Aufgabenstellung bekommen:
1.) Stündlich Telegramme vom Server abzuziehen.
2.) Telegramme formatieren.
3.) formatierte Daten in einer Datenbank (MySQL) speichern.
Mein Lösungsansatz war, zuerst die Dateien mit Robocopy stündlich zu syncronisieren. Anschliessend in einer Textdatei zusammen fassen und mit PHP öffnen, bearbeiten......
------------------------------------------------------------------------------
Script 1:
<?php
$datei = file("G:/neu.txt");
$dateiR = "v:/file.csv";
$fp = fopen($dateiR,"w");
$i=0;
foreach($datei AS $ausgabe) {
$ausgabe = strtr($ausgabe, ":", ",");
$ausgabe = str_replace("<-", ",<-", $ausgabe);
$ausgabe = str_replace("S->", ",S->", $ausgabe);
$ausgabe = str_replace("<S", "S", $ausgabe);
$ausgabe = str_replace("<M", "M", $ausgabe);
$ausgabe = str_replace(" SP", ",SP", $ausgabe);
$ausgabe = str_replace(" TCP", ",TCP", $ausgabe);
$ausgabe = str_replace("*>", "*", $ausgabe);
$ergebnis = trim ($ausgabe);
$zerlegen = explode(",", $ergebnis);
$zeile=implode(',',$zerlegen)."\n";
fputs($fp,$zeile);
}
fputs($fp,$data); # daten in datei speichern
$i++;
fclose($fp);
echo "fertig";
?>
----------------------------------------------------------------------------------
und speichern.
----------------------------------------------------------------------------
Script 2:
<?php
$db = mysqli_connect("localhost","root","null","","3306") or die("Keine Verbindung zur Datenbank!");
$datum = date("Y-m-d");
//Eine Datenbank, mit dem aktuellen Datum als Bezeichnung, wird erstellt
$sql = "CREATE DATABASE telegramme
";
$ergebnis=mysqli_query($db, $sql);
//Zur aktuellen(eben erstellten) Datenbank connecten
$db = mysqli_connect("localhost","root","null","telegramme","3306") or die("Keine Verbindung zur neuen Datenbank!");
//Tabelle wird erstellt
//$tabelle_erstellen="CREATE TABLE connect".$datum."
( ;Hier wird die Tabelle mit dem aktuellen Datum angelegt
$tabelle_erstellen="CREATE TABLE daten
(
Datum
varchar(16)collate latin1_general_ci NOT NULL,
Zeit
varchar(12) collate latin1_general_ci NOT NULL,
Melder
varchar(10) collate latin1_general_ci NOT NULL,
Richtung
varchar(4) NOT NULL,
Daten
varchar(50) NOT NULL,
PRIMARY KEY (Datum
,Zeit
)
) ENGINE=MyISAM DEFAULT CHARSET=latin1";
$ergebnis=mysqli_query($db, $tabelle_erstellen);
//Der von der Batchdatei erstellte Flatfile wird geöffnet und als Variable eingelesen.
$statistik = 'file.csv';
$fp = fopen ( $statistik, 'r' );
//Die Variable wird hier in sein Bestandteile zerlegt, neu zusammengefügt und anschliessend in die Datenbank geschrieben.
while (!feof($fp))
{
$ipteiler = fgets($fp);
list($t1, $t2, $t3, $t4, $t5, $t6, $t7, $t8, $t9) = explode(",", $ipteiler);
$ins = ("replace into telegramme.daten
values('".$t1.", ".$t2."','".$t3.":".$t4.":".$t5.":".$t6."','".$t7."','".$t8."','".$t9."');");
$ergebnis=mysqli_query($db, $ins);
}
// Hier ist das Script durchgelaufen
echo 'beendet';
fclose($fp);
?>
------------------------------------------------------------------------------
Beim testen hat alles so funktioniert wie ich mir das vorgestellt hatte leider hatten die Testdateien auch nur eine Größe von 489kb und nicht 1GB.
Da ich PHP Neuling bin weiß ich jetzt nicht mehr weiter wie ich so eine Große Datei einlesen kann. Für Hilfe würde ich mich riesig freuen.
Gruß Olaf