Как получить общее количество строк в CSV-файле с помощью PHP?

Как я могу получить общее количество строк, которые находятся в файле CSV, используя PHP? Я использую этот метод, но могу заставить его работать правильно.

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

Вот еще один вариант использования file() для чтения всего файла в массив, автоматического разбора новых строк и т. Д .:

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

Кроме того, начиная с PHP5, вы можете передать FILE_SKIP_EMPTY_LINES …, чтобы пропустить пустые строки, если вы хотите:

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

Руководство: http://php.net/manual/en/function.file.php

Пытаться

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

Создайте ссылку на новый файл с помощью SplFileObject :

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

Попытайтесь seek самый высокий Int PHP, который может обрабатывать:

 $file->seek(PHP_INT_MAX); 

Тогда на самом деле он будет искать самую высокую строку в файле, есть последняя строка, а последняя строка + 1 равна вашим общим строкам:

 echo $file->key() + 1; 

Трудно, но это позволит вам не загружать содержимое файла в память, что очень приятно делать при работе с действительно большими файлами.

Я знаю, что это довольно старый, но на самом деле я столкнулся с тем же вопросом. В качестве решения я бы предположил использовать специфическую для Linux логику:

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

ПРИМЕЧАНИЕ: это работает только для Linux, и это нужно использовать, только если вы на 100% уверены, что в вашем файле нет многострочных ячеек

Строки CSV разделяются разрывами строк. Поэтому разделите строки на разрывы строк, и вы получите массив строк, который является счетным.

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

Я знаю, что это старый пост, но я искал эту проблему и обнаружил, что единственная проблема с исходным кодом заключалась в том, что вам нужно определить $row вне цикла while , например:

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

На всякий случай это помогает кому-то 🙂 echo $ row; }

 $filename=$_FILES['sel_file']['tmp_name']; $file=fopen($filename,"r"); $RowCount=0; while ((fgetcsv($file)) !== FALSE) { $RowCount++; } echo $RowCount; fclose($file); 

count (файл ('filename.csv', FILE_SKIP_EMPTY_LINES));

Если вы получаете файл из формы

 $file = $_FILES['csv']['tmp_name']; $fp = new SplFileObject($file, 'r'); $fp->seek(PHP_INT_MAX); echo $fp->key() + 1; $fp->rewind(); 

Работает как шарм !!!!!!!!!!!!!!!!!!