basti1012
Erfahrenes Mitglied
Kurze erklärung zum Problem.
Habe einen Ordner mit 99999 Datein Ca.
Da stehen alle Strassennamen mit Geo Daten und co drinne.
Die Datein gehen von 01000.php bis 99999.php . Die Zahlen sind die Postleitzahlen.
In diesen Datein sieht es so aus.
Am Anfang habe ich alle Datein durch eine Schleife gejagt und da ist klar das Php Timeout rauswirft.
Also hole ich jetzt immer nur eine Datei aus den Ordner und lese die dann so in der Db ein
Bitte keine aussagen zu sql und co weil der nur für mich einmalig zum einlesen ist.
Der Code Funktioniert soweit ganz gut.
Sind da aber mehr Einträge als ca 100 drinne kommt immer Timeout.
Datenbanken sollten doch mehr alls 100 Einträge lesen und schreiben können bis zum Timeout oder ?
Gibt da eine schnellere möglichkeit , oder was performance Technischer besser ist ?
Habe einen Ordner mit 99999 Datein Ca.
Da stehen alle Strassennamen mit Geo Daten und co drinne.
Die Datein gehen von 01000.php bis 99999.php . Die Zahlen sind die Postleitzahlen.
In diesen Datein sieht es so aus.
Code:
[{"id":74510,"name":"Adolph-Kolping-Weg","gemeinde":"Gilching","plz":"82205","centr_lon":11.288130,"centr_lat":48.118161},
{"id":76162,"name":"Ahornstraße","gemeinde":"Gilching","plz":"82205","centr_lon":11.323844,"centr_lat":48.110645},
{"id":86007,"name":"Allinger Straße","gemeinde":"Gilching","plz":"82205","centr_lon":11.291399,"centr_lat":48.123642},
{"id":86491,"name":"Almersweg","gemeinde":"Gilching","plz":"82205","centr_lon":11.287451,"centr_lat":48.115983},
usw...
Am Anfang habe ich alle Datein durch eine Schleife gejagt und da ist klar das Php Timeout rauswirft.
Also hole ich jetzt immer nur eine Datei aus den Ordner und lese die dann so in der Db ein
PHP:
$inhalt=file_get_contents($link);
$gep=json_decode($inhalt,true);
//print_r($gep);
foreach ($gep as $geparst){
$r++;
$gesammt=$r;
if($r<2000){// versucht zu begrenzen bei großen Datein
$fileid=$geparst['id'];
$name=$geparst['name'];
$gemeinde=$geparst['gemeinde'];
$plz=$geparst['plz'];
$centr_lon=$geparst['centr_lon'];
$centr_lat=$geparst['centr_lat'];
$query="SELECT * FROM `stadt_strassen_datenbank1` WHERE `fileid`='$fileid' AND `name`='$name' AND `centr_lon`='$centr_lon'";
$re=mysqli_query($mysqli,$query);
if($re){
$cnt = mysqli_num_rows($re);
if($cnt>=1){
//echo $fileid.' Schon '.$cnt.' mal da<br>';
$alt++;
}else{
$query1="INSERT INTO `stadt_strassen_datenbank1`(`fileid`, `name`, `gemeinde`, `plz`, `centr_lon`, `centr_lat`)
VALUES ('$fileid','$name','$gemeinde','$plz','$centr_lon','$centr_lat')";
$re1=mysqli_query($mysqli,$query1);
if($re1){
//echo $fileid.' wurder erstellt<br>';
$neu++;
}else{
$nicht='{"fileid":'.$fileid.', "name":'.$name.', "gemeinde":'.$gemeinde.', "plz":'.$plz.', "centr_lon":'.$centr_lon.', "centr_lat":'.$centr_lat.'"}';
file_put_contents('NOT_GESPEICHERT.php', $nicht, FILE_APPEND | LOCK_EX);
echo "Error INSERT: " . mysqli_error($mysqli) . "<br>";
$error++;
}
}
}else{
echo "Error SELECT: " . mysqli_error($mysqli) . "<br>";
}
}
}
if($error==0){
unlink($link);
$gel=$file.' Gelöscht';
}else{
$gel=$file.' Nicht gelöscht';
}
Der Code Funktioniert soweit ganz gut.
Sind da aber mehr Einträge als ca 100 drinne kommt immer Timeout.
Datenbanken sollten doch mehr alls 100 Einträge lesen und schreiben können bis zum Timeout oder ?
Gibt da eine schnellere möglichkeit , oder was performance Technischer besser ist ?