Avatar billede flushout Nybegynder
18. oktober 2007 - 15:56 Der er 1 kommentar og
1 løsning

Indlæsning af stor fil bagvendt (som tail)

Hejsa

Jeg sidder med den opgave at jeg skal indlæse en meget stor fil (Apaches access.log).

Der er to konkrete problemstillinger jeg vil be' om hjælp til:

- Hvordan man mest effektivt (hukommelse osv) indlæser filer på 200+ MB.

- Om det er muligt, at indlæse filen bagfra (som tail).

Min nuværende kode er som følger (udsnit af koden):
-----<CODE>-----

unset($this->_logs);
$this->_logs = array();

$hFile = fopen($this->logfile,"r");
$line = fgets($hFile);
while (!feof($hFile)) {
  $line = $this->_ReplaceCharInsideQuote($line,' ','§');
  $line = sscanf($line, $this->_phpformat);

  $i = 0;
  foreach(array_keys($this->_infos) as $key) {
    $inf[$key] = $this->_FormatData($key,$line[$i]);
    $i++;
  }
  array_push($this->_logs,$inf);
  $line = fgets($hFile);
}
fclose($hFile);

reset($this->_logs);
$this->_logs = array_reverse($this->_logs);

-----</CODE>-----

Problemet med ovenstående kode er at det tager FANDENS lang tid at indlæse store filer ;-(

På forhånd tak for hjælpen :-)
Avatar billede flushout Nybegynder
18. oktober 2007 - 15:59 #1
Det skal lige tilføjes...

HVIS det kan lade sig gøre vil det være helt OK at der kun bliver indlæst en begrænset mængde af filen. Det skal dog altid være den første del af filen der 'klippes af'

Det er ikke aktuelt med shell kommandoer (som tail), da det desværre skal køre på både UNIX og WINDOWS kasser.
Avatar billede flushout Nybegynder
19. oktober 2007 - 14:44 #2
fseek :p ... i er sgu for sløve..!
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester