WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Ett PHP problem (https://www.wn.se/forum/showthread.php?t=29721)

klein 2008-06-04 15:11

Jag skall läsa in ganska stora textfiler i PHP och sedan skyffla in dem i en databas.

Vilket sätt är snabbast ?

Jonas 2008-06-04 17:22

Hur mycket minne har PHP möjlighet att hantera? (memory_limit = ???)
Ta textfilen * 2 + lite overhead, och är textfilen under detta värde så borde det gå att läsa in hela filen, annars så skulle jag stycka filen (läs in filen i stycken i php).

Samt för att underlätta för databasen så lägg lite längre frågor åt mysql.
Tex: INSERT INTO table (`field1`, `field2`) VALUES ('value1', 'value2'), ('value1', 'value2') osv.

tjo1 2008-06-04 17:40

Jag brukar göra sånt från prompten.
Har iofs vart färre än 100' rader endast än så länge.

hur stor är filen och hur stor swap har du?(man jan göra en extra swap)

/Tommy

klein 2008-06-04 18:10

Citat:

Originally posted by Jonas@Jun 4 2008, 17:22
Hur mycket minne har PHP möjlighet att hantera? (memory_limit = ???)
Ta textfilen * 2 + lite overhead, och är textfilen under detta värde så borde det gå att läsa in hela filen, annars så skulle jag stycka filen (läs in filen i stycken i php).

Samt för att underlätta för databasen så lägg lite längre frågor åt mysql.
Tex: INSERT INTO table (`field1`, `field2`) VALUES ('value1', 'value2'), ('value1', 'value2') osv.

Men hur skriver man kodmässigt?
Drömmen är slurpa i sig hela textfile till minne och sedan kluva upp den i mindre segment och sedan stoppa in dem i databasen.
Filerna kan ha olika format, dvs ; eller \t sep. men dom skall ha samma format i databasen.

WizKid 2008-06-04 18:18

MySQL kan ju importera filer direkt. Kanske kan vara något: http://dev.mysql.com/doc/refman/5.0/en/load-data.html

kers 2008-06-04 18:24

kolla in

http://www.modwest.com/help/kb.phtml?qid=253&cat=6

Jonas 2008-06-04 18:32

Kod:

<?php
$filename = 'file.txt';
$fp = fopen($filename, 'r');
$content = fread($fp, filesize($filename));
fclose($fp);

preg_match("#(;|\\t)\n#s", $content, $matches);
printf_r($matches);
?>

Och matcha in resultatet i databasen. (Koden är en "hint" och säkerligen ingen fungerande kod.)

Annars är nog WizKid's förslag mest optimalt om det handlar om CSV data, då mysql har inbyggt stöd för detta.


Alla tider är GMT +2. Klockan är nu 01:20.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson