web-dev-qa-db-fra.com

Comment obtenir le nombre total de lignes d'un fichier CSV avec PHP?

Comment obtenir le nombre total de lignes contenues dans un fichier CSV avec PHP? J'utilise cette méthode mais je peux la faire fonctionner correctement.

if (($fp = fopen("test.csv", "r")) !== FALSE) { 
  while (($record = fgetcsv($fp)) !== FALSE) {
      $row++;
  }

  echo $row;
}
23
telexper

Voici une autre option utilisant file() pour lire le fichier entier dans un tableau, en analysant automatiquement les nouvelles lignes, etc.:

$fp = file('test.csv');
echo count($fp);

De plus, depuis PHP5, vous pouvez passer le FILE_SKIP_EMPTY_LINES... pour ignorer les lignes vides, si vous voulez:

$fp = file('test.csv', FILE_SKIP_EMPTY_LINES);

Manuel:http://php.net/manual/en/function.file.php

48
Robbie Averill

Créez une nouvelle référence de fichier en utilisant SplFileObject:

$file = new SplFileObject('test.csv', 'r');

Essayez de seek au plus haut Int PHP peut gérer:

$file->seek(PHP_INT_MAX);

Ensuite, en fait, il cherchera la plus haute ligne possible dans le fichier, il y a votre dernière ligne et la dernière ligne + 1 est égale à votre total de lignes:

echo $file->key() + 1;

Difficile, mais cela vous évitera de charger le contenu du fichier en mémoire, ce qui est une très bonne chose à faire lorsque vous traitez avec des fichiers très volumineux.

37
Leo Cavalcante

Essayer

$c =0;
$fp = fopen("test.csv","r");
if($fp){
    while(!feof($fp)){
          $content = fgets($fp);
      if($content)    $c++;
    }
}
fclose($fp);
echo $c;
13
Nouphal.M

Je sais que c'est assez vieux, mais en fait, j'ai rencontré la même question… .. En tant que solution, je supposerais utiliser une logique spécifique à Linux:

$rows = Shell_exec('$(/bin/which cat) file.csv | $(/bin/which tr) "\r" "\n" | $(which wc) -l');

NOTE: cela ne fonctionne que pour linux et ne doit être utilisé que si vous êtes certain à 100% que votre fichier ne contient pas de cellules multilignes  

6
boesing

Les lignes CSV sont séparées par des sauts de ligne. Par conséquent, divisez les lignes par des sauts de ligne et vous obtiendrez un tableau de lignes dénombrable.

if (($fp = fopen("test.csv", "r")) !== FALSE) { 
    $rows = explode("\n", $fp);
    $length = count($rows);

    echo $length;
}
4
Josh S.
$filename=$_FILES['sel_file']['tmp_name'];
$file=fopen($filename,"r");
$RowCount=0;

while ((fgetcsv($file)) !== FALSE) 
{
    $RowCount++;
}

echo $RowCount;
fclose($file);
0
Gagandeep cheema

Je sais que ceci est un ancien message, mais je cherchais ce problème dans Google et trouvais que le seul problème avec le code original était que vous devez définir $row en dehors de la boucle while , comme ceci:

if (($fp = fopen("test.csv", "r")) !== FALSE) { 
$row = 1;
  while (($record = fgetcsv($fp)) !== FALSE) {
      $row++;
  }

Juste au cas où cela aiderait quelqu'un:) echo $ row; }

0
Rosamunda