516 votes

Comment lire un fichier ligne par ligne en php

Comment lire un fichier ligne par ligne en php, sans le charger complètement en mémoire. Parce que mon fichier est trop grand pour ouvrir en mémoire, j'ai toujours eu une erreur d'échappement de la mémoire. La taille du fichier est de 1Go.

750voto

codaddict Points 154968

Vous pouvez utiliser la fonction fgets() pour lire le fichier ligne par ligne:

 $handle = fopen("inputfile.txt", "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        // process the line read.
    }
} else {
    // error opening the file.
} 
fclose($handle);
 

135voto

Syuaa SE Points 251
$file = fopen("file.txt", "r");
while(!feof($file)){
    $line = fgets($file);
    # do same stuff with the $line
}
fclose($file);

108voto

elshan Points 11

Vous pouvez utiliser une classe d'interface orientée objet pour un fichier - SplFileObject http://php.net/manual/en/splfileobject.fgets.php (PHP 5> = 5.1.0)

 <?php

$file = new SplFileObject("file.txt");
while (!$file->eof()) {
    echo $file->fgets();
}
$file = null;

?>
 

31voto

Starx Points 38727

Utilisez des techniques de mise en tampon pour lire le fichier.

 $filename = "test.txt";
$source_file = fopen( $filename, "r" ) or die("Couldn't open $filename");
while (!feof($source_file)) {
    $buffer = fread($source_file, 4096);  // use a buffer of 4KB
    $buffer = str_replace($old,$new,$buffer);
    ///
}
 

8voto

Cuse70 Points 61

Soyez prudent avec le truc 'while (! Feof ... fgets ()', les fgets peuvent obtenir une erreur (returnfing false) et boucler pour toujours sans atteindre la fin du fichier codaddict était le plus proche d'être correct mais quand votre 'while fgets' boucle se termine, vérifiez feof, sinon vrai, alors vous avez eu une erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X