webForumDet fria alternativet

Byta från Flat-file till Mysql

PHP

7 svar · 216 visningar · startad av mikaeled

Medlem sedan dec. 2000157 inlägg
Frågan#1

Hej,

Jag använder nu en vanliga .log filer för ett system med omkring 20 000 användare (filer).

Nu skulle jag vilja göra ett script som läser dessa log-filer och skapar rader i mysql databasen.

logfilerna är uppbyggda såhär och de är numrerade men vissa nummer är borta, pga att de har tagit bort sitt konto hos oss:

namn | email | etc | etc

Vore mycket tacksam för hjälp!

------------------
//Mikael

Medlem sedan dec. 19991 749 inlägg
#2

Buslätt....

Gör bara en loop som går igenom varje rad i filen.

Läs in hela raden och gör om den med explode("|",$rad);

Gör insertsatser utav det hela :)

slut på loop...

njut av den ökade hastigheten och flexibiliteten

------------------

"Information wants to be free -- because it is now so easy to copy and distribute casually -- and information wants to be expensive -- because in an Information Age, nothing is so valuable as the right information at the right time."
- John Perry Barlow

nanne.net

Medlem sedan dec. 2000157 inlägg
#3

Hej,

Jag är inte så duktig på loopar etc. Skulle inte ngn vilja skriva koden?

Vore super tacksam

/Mikael

------------------
//Mikael

Medlem sedan juni 20001 251 inlägg
#4

Ett litet exempel:

<?

$db = mysql_connect ("localhost", "anvandare", "losenord") OR DIE (mysql_error());
mysql_select_db("databas",$db) OR DIE (mysql_error());

$dir=opendir("/home/minhamkatalog/");

while($fil = readdir($dir))  {
$typ=substr($fil,0,-4);

	if ($typ==".log") {
		$array = readfile($fil);
		$array=explode ("&#0124;", $array);
		mysql_query("INSERT INTO tabell (namn, osv, osv) VALUES ('$array[0]','$array[1]','$array[2]')") OR DIE (mysql_error());
		}
	}
}
closedir($dir);

mysql_close($db);
?>

Har ej testats. Måste antagligen köras via kommandoraden om inte scripttimeouten i php.ini har ändrats.

------------------
SteveNet - stevenet@webmarkit.net
Cogito ergo doleo.

Medlem sedan jan. 200122 inlägg
#5

Eller om du vill slippa att koda och loopa:

LOAD DATA LOCAL INFILE 'filnamn.log' INTO TABLE tabellen TERMINATED BY '|';

Skapa tabellen först.

Aha, det var flera filer, så det blir väl en loop ändå då om du har ett större antal filer, men frågan funkar juh.

/Al

[Redigerat av Al den 20 feb 2001]

Medlem sedan dec. 2000157 inlägg
#6

Hej,

koden som en kille ovanför skrev fungerarade inte. Det blev ngt fel.

Ni andra kan ju försöka debugga den så att det funkar. Vore mycket tacksam!

------------------
//Mikael

Medlem sedan nov. 200059 inlägg
#7

vill inte låta elak eller nåt sånt men hrrm du är admin för ett system med ca 20 000 användare och du vet inte ens hur man loopar

Medlem sedan dec. 2000157 inlägg
#8

Hej,

Det stämmer. Förut hade jag tillgång till en programmerare men han är tyvärr ute på en jordenruntresa.

Nu har jag fått intresset att byta från flat-file till mysql samt att utveckla tjänsten ännu mer.

Jag skulle gärna vilja ha fungerande kod, så jag vore tacksam om du kunde kika på koden ovan!

MVH

-Mikael

253 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)