Indlæsning af stor fil bagvendt (som tail)
HejsaJeg 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 :-)