Einzelnen Beitrag anzeigen
  #6 (permalink)  
Alt 15-03-2013, 16:44
Melewo
 Registrierter Benutzer
Links : Onlinestatus : Melewo ist offline
Registriert seit: Jan 2013
Beiträge: 365
Melewo befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von andygyr Beitrag anzeigen
Desshalb die Frage, gibt es eine Alternative eine Datei von hinten nach vorne zu lesen?
Weiß ja nicht, wie groß Deine CSV ist oder werden könnte. Der Einwand von fireweasel war berechtigt. Deshalb noch einmal einen Test gemacht, diesmal mit einer CSV mit 200.001 Zeilen und einer Größe von 181 MB (190.381.377 Bytes). Bei Verwendung von File kommt nun sofort ein Abbruch.

PHP-Code:
<?php

$csv  
"test3.csv";
$daten file($csv);

// Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 190389569 bytes)
?>
Aber mit Schleifen, wobei bei den Tests nur die letzten 20 Zeilen eingelesen und ausgegeben wurden, klappt es ohne Probleme. Laufzeit: 0.6 Sekunden

PHP-Code:
<?php

$abz  
1;
$rows 0;
$asg  20;
$csv  "test3.csv";

if ((
$handle fopen($csv"r")) !== false) {

    while ((
fgets($handle4096)) !== false ) {

    
$rows++;
    }
    
$abzeile $rows $asg;
    
rewind ($handle);

    while ((
fgets($handle4096)) !== false) {

        
$abz++;
        if (
$abz $abzeile) {

            while ((
$data fgetcsv($handle4096";")) !== false) {

                
$num count($data);
                
$daten[] = $data;
            }
        }
    }
    
fclose($handle);
}

$daten array_reverse($daten);

echo 
"<ol>\n";

for (
$i 0$i $asg$i++) {

    echo 
"<li>\n<ul>\n";

    for (
$n 0$n $num$n++) {

        echo 
"<li>".htmlspecialchars($daten[$i][$n])."</li>";
    }
    echo 
"</ul>\n</li>\n";
}
echo 
"</ol>\n";

?>
Mit Zitat antworten