Mit spørgsmål går på at jeg skal indsætte noget SQL fra et eksisterende script, men det vil ikke rigtigt virke for mig, så håber at der er nogle kloge menesker der vil give et råd eller to ;-)
MIT SCRIPT:
<?php
include "connect.php";
$read_chars = ($_GET['read_chars'] == "") ? 0 : $_GET['read_chars']; //Current position in file $num_of_lines = 1000; //Number of lines to read
if($handle) { $read_lines = 0;
$import = mysql_query("SELECT cvr FROM virksomheder WHERE cvr > '0'");
while($row = mysql_fetch_array($import)) {
$handle = fopen("cvrfil/csvfil.csv");
while ($data = fgetcsv($handle, 10000000, ";")) {
if($data[1] == $row[cvr]) { $import1="INSERT into virksomhederfracvr(cvrnr,pnr,navn,navn1,adresse,bynavn,postnr,postdist,region,kommunenavn,antalansatte,virkform,virkstartdato,branchenr,branchetekst,telefon,telefax,email) values('$data[1]','$data[2]','$data[3]','$data[4]','$data[7]','$data[8]','$data[11]','$data[12]','$data[15]','$data[17]','$data[32]','$data[34]','$data[39]','$data[42]','$data[46]','$data[49]','$data[50]','$data[51]')"; mysql_query($import1) or die(mysql_error());
Meningen er at jeg vil tjekke en fil igennem efter bestemte cvr numre, hvis disse findes oploades disse i databasen. Men da min csv fil er temmelig stor, får jeg timeout, og dette skulle kunne undgås med ovenstående script. Jeg har prøvet med max_execution_time og det hjælper ikke tilstrækkeligt.
Hvor stor er filen ? Jeg har tidligere arbejdet med en text fil på 12mb, uden problemer. Men det kommer meget ang på opsætningen af serveren selvfølgelig.
Måske din timeout kan snydes, ved at lave noget output og flush() undervejs (eller ofte)
Ja du har ret, det er som sådan heller ikke upload der ikke virker, jeg har filen på min server, den er lagt op med ftp, så langt så godt. Men jeg har et script der skal køre et check på ca. 1.6 mil linier kode, og inden den er færdig med at process scriptet så timer sriptet ud, det er en kæmpe stor .csv fil der er tale om.
Jeg har et script der virker fint, men kun med meget mindre csv filer, da disse ikke timer ud.
<? include "connect.php"; echo '<LINK href="../default.css" type="text/css" rel="stylesheet">';
if(isset($_POST['kor']))
{
mysql_query("DELETE FROM virksomhederfracvr");
$import = mysql_query("SELECT cvr FROM virksomheder WHERE cvr > '0'");
while($row = mysql_fetch_array($import)) {
$handle = fopen("cvrfil/csvfil.csv", "r");
while ($data = fgetcsv($handle, 10000000, ";")) {
if($data[1] == $row[cvr]) { $import1="INSERT into virksomhederfracvr(cvrnr,pnr,navn,navn1,adresse,bynavn,postnr,postdist,region,kommunenavn,antalansatte,virkform,virkstartdato,branchenr,branchetekst,telefon,telefax,email) values('$data[1]','$data[2]','$data[3]','$data[4]','$data[7]','$data[8]','$data[11]','$data[12]','$data[15]','$data[17]','$data[32]','$data[34]','$data[39]','$data[42]','$data[46]','$data[49]','$data[50]','$data[51]')"; mysql_query($import1) or die(mysql_error());
echo "Jubii";
}
}
}
fclose($handle); print "<span class='green'>Import færdig, lukker om 5 sekunder</span>";
Ja, men som du måske kan se i scriptet, er jeg kun intresseret i ca. 2000 linie af hele filen, derfor forstillede jeg mig at det var nemmer at sortere dem fra, inden data blev lagt ind, dvs. i en operation.
Med hensyn til memory_limit så må jeg melde pas, hvor ser jeg dette?
Og så kan du se at der er problemer med 402mb fil. :o) Men kan du ikke bruge din kode fra dit første indlæg ? Den læser jo små bider. Og så vil det jo bare være at indsætte data i en tabel. Hvilket format står dine data i ?
Det var også den oprindelige ide, men det virker bare mere logisk for mig, at sortere alle de spild data fra inden disse kommer ind i databasen.
Man kan jo sige, at mit script jo virker fint, det sortere dem fra og sætter kun dem ind der skal ind, men det timer out før at alt er sorteret, så der kommer jo data ind, bare ikke alt. Derfor er jeg også intresseret i den løsning, da det jo "kun" skal kunne køre længere det script jeg allerede har lavet!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.