今天有同事在群里提问:如何读取一个20g的文件的最后10行。也就是说文件大小超过php内存限制。 今天尝试了一下,找到两种方式来完成这个任务。 1.调用系统命令tail -n 10 filename $ph = popen('tail -n 10 bigfile.txt','r');while($r = fgets($ph)){echo $
今天有同事在群里提问:如何读取一个20g的文件的最后10行。也就是说文件大小超过php内存限制。
今天尝试了一下,找到两种方式来完成这个任务。
1.调用系统命令tail -n 10 filename
$ph = popen('tail -n 10 bigfile.txt','r'); while($r = fgets($ph)){ echo $r; } pclose($ph);
当然调用系统命令的方式不止这一种,更多方法请参考http://blog.51yip.com/php/1064.html
2.第二种通过文件指针,每次读一行放到一个数组里面,超过10行,把最前面的一行删掉,知道读完整个文件
$fh = fopen('bigfile.txt','r'); $r = array(); while($l = fgets($fh)){ array_push($r,$l); if(count($r)>10){ array_shift($r); } file_put_contents('memory.txt',memory_get_usage()); } var_dump($r);
昨天一直在想,要是能找个移动文件指针的函数就好了,但是找了半个小时没找到。今天同事告诉我php的确有这样一个函数fseek,只不过是按字符移动而不是按行移动的。看了下手册,下面的评论中已经直接给出实现方案了.代码的实现和我起初的构想基本类似,包括一次性移动多个字符,然后计算剩余内容里面换行符的个数。
function tail($file, $num_to_get=10) { $fp = fopen($file, 'r'); $position = filesize($file); fseek($fp, $position-1); $chunklen = 4096; while($position >= 0) { $position = $position - $chunklen; if ($position = $num_to_get + 1) { preg_match("!(.*?\n){".($num_to_get-1)."}$!", $data, $match); return $match[0]; } } fclose($fp); return $data; }
附上我生存这个大文件的方法
$s = ''; for($i =0;$i <p class="copyright"> 原文地址:php读取一个20G文件的最后10行, 感谢原作者分享。 </p>

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Penyesuai Pelayan SAP NetWeaver untuk Eclipse
Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.

VSCode Windows 64-bit Muat Turun
Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa