Wie kann ich die Letzte Zeile der Datei user.txt in eine Variabele einlesen? Unten sind zwei Möglichkeiten --> ganz einfache
und etwas unständlichere.
Der Zeitfaktor bei 1,2 Mb Datei mit ca. 90.000 Lines
ist 1000 !!!! Also:
<?php
$strFileName = 'C:\\ Image.out';
// Möglichkeit Zwei : die datei wird 100 mal ausgelesen : 6.6 sek
$timer = startTime();
for($x=0;$x<100;$x++){
$daten=file($strFileName); // file voll in den array laden
$intCount = count($daten);
$strRow =$daten[($intCount-1)] .'<br>'; // -1 , weil von 0 gezählt wird
}
echo $strRow .'<br>';
$endTime = endTime($timer);
echo $endTime . ' Sekunden'.'<br>';
// Möglichkeit Eins : die datei wird 100 mal ausgelesen : 0.006 sek
$timer = startTime();
for($x=0;$x<100;$x++){
$fp = fopen($strFileName,'r');
$fileSize = fileSize($strFileName);
$intLineFinded = 0; // Anzahl der ausgelesener Zeilen
$intLineLenExpect = 2; // die zu erwartende Grösse der letzten Zeile
While ($intLineFinded < 2) // es müssen mindestens zwei Zeilen ausgelesen werden, damit man sicher ist --> die letzte ist vollständig
{
$intLineLen = 0; // abnullen für neue Suche
$intLineFinded = 0; // abnullen für neue Suche
$intReadPos = $fileSize - $intLineLenExpect; // Anfangs - Postion der Lesezeichens festlegen
fseek($fp, $intReadPos ,'SEEK_SET');
//echo $intLineLen . ' ' . $intReadPos . ' ' . $fileSize .'<br>' ;
While (($intLineLen + $intReadPos) < $fileSize) // --> finde Letzte Zeile
{
$strRow = fgets($fp,($intLineLenExpect+1));
//echo $strRow . ' ' . $intLineLenExpect .'<br>' ;
$intLineFinded ++;
$intLineLen = strlen($strRow);
$intReadPos += $intLineLen;
}
$intLineLenExpect *= 2 ; // wenn nur Eine Line gefunden, muss man obere Schleife wiederholen mit grösserem Wert
// if ($intLineLenExpect >1000 ) break;
}
fclose ( $fp );
}
$endTime = endTime($timer);
echo $endTime . ' Sekunden'.'<br>';
echo $strRow .'<br>';
?>
Geändert von rumike (31.07.2009 um 02:31 Uhr).
|