<?php declare(strict_types=1); ini_set('display_errors', 'On'); error_reporting(-1); /** * 获取文件内容行数 * 规定①:文件为空时(判断是否为空的依据是文件大小),文件内容行数为0。 * 规定②:文件末尾行是空行时不算做一行,即末尾空行不计入文件内容行数。 * * @param string $filename 文件路径 * @return int 文件内容行数 */ function fileline(string $filename): int { $filesize = filesize($filename); // 获取文件大小,单位:字节 if ($filesize === false || $filesize === 0) { $line = 0; // 文件为空(也有可能获取文件大小失败,但都归为文件为空的情况) } else { $line = 1; // 文件不为空 } // 文件不为空才进一步获取行数 if ($line === 1) { $handle = fopen($filename, 'rb'); // 打开文件 $counter = 1; // 行数计数器(打开文件时指针是在第1行,所以计数器初始值为设为1) while (true) { fgets($handle, 4096); // 文件指针移到下一行 // 检查是否到达文件结尾(EOF) if (feof($handle)) { fseek($handle, -1, SEEK_END); // 将文件指针移回文件尾之前1个字节的位置 $end = fgets($handle, 4096); // 获取末尾行的内容 break; } $counter++; // 行数计数器自增1 } fclose($handle); // 关闭文件 // 若末尾行内容为PHP_EOL说明是空行,根据末尾空行不算做一行的规定,行数计数器需要自减1 $end === PHP_EOL && $counter--; $line = $counter; } return $line; } $filename = __DIR__ . '/test.txt'; $fileline = fileline($filename); echo "文件内容行数:$fileline" . PHP_EOL;
Copyright © 2024 码农人生. All Rights Reserved