Как я могу получить общее количество строк, которые находятся в файле 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();
Работает как шарм !!!!!!!!!!!!!!!!!!