Hướng dẫn php read line by line from file - php đọc từng dòng từ tệp

Tôi muốn đọc một dòng tệp từng dòng, nhưng không tải hoàn toàn nó trong bộ nhớ.

Tệp của tôi quá lớn để mở trong bộ nhớ và nếu cố gắng làm như vậy tôi luôn thoát khỏi các lỗi bộ nhớ.

Kích thước tệp là 1 GB.

Đã hỏi ngày 6 tháng 11 năm 2012 lúc 7:49Nov 6, 2012 at 7:49

Adnan Masoodadnan Masoodadnan masood

5.7752 Huy hiệu vàng13 Huy hiệu bạc6 Huy hiệu đồng2 gold badges13 silver badges6 bronze badges

2

Bạn có thể sử dụng chức năng if ($file = fopen("file.txt", "r")) { while(!feof($file)) { $line = fgets($file); # do same stuff with the $line } fclose($file); } 4 để đọc từng dòng tệp:

$handle = fopen("inputfile.txt", "r"); if ($handle) { while (($line = fgets($handle)) !== false) { // process the line read. } fclose($handle); }

Đã trả lời ngày 6 tháng 11 năm 2012 lúc 7:51Nov 6, 2012 at 7:51

CodaddictCodaddictcodaddict

436K80 Huy hiệu vàng488 Huy hiệu bạc525 Huy hiệu đồng80 gold badges488 silver badges525 bronze badges

7

if ($file = fopen("file.txt", "r")) { while(!feof($file)) { $line = fgets($file); # do same stuff with the $line } fclose($file); }

Đã trả lời ngày 6 tháng 11 năm 2012 lúc 7:55Nov 6, 2012 at 7:55

3

Bạn có thể sử dụng lớp giao diện định hướng đối tượng cho một tệp - SplFileObject //php.net/manual/en/splfileObject.fgets.php (Php 5> = 5.1.0)SplFileObject //php.net/manual/en/splfileobject.fgets.php (PHP 5 >= 5.1.0)

<?php $file = new SplFileObject("file.txt"); // Loop until we reach the end of the file. while (!$file->eof()) { // Echo one line from the file. echo $file->fgets(); } // Unset the file to call __destruct(), closing the file handle. $file = null;

Sẽ

23.2K13 Huy hiệu vàng93 Huy hiệu bạc105 Huy hiệu đồng13 gold badges93 silver badges105 bronze badges

Đã trả lời ngày 4 tháng 10 năm 2014 lúc 5:28Oct 4, 2014 at 5:28

elshnkhllelshnkhllelshnkhll

2.0121 Huy hiệu vàng19 Huy hiệu bạc22 Huy hiệu đồng1 gold badge19 silver badges22 bronze badges

5

Nếu bạn muốn sử dụng if ($file = fopen("file.txt", "r")) { while(!feof($file)) { $line = fgets($file); # do same stuff with the $line } fclose($file); } 5 thay vì if ($file = fopen("file.txt", "r")) { while(!feof($file)) { $line = fgets($file); # do same stuff with the $line } fclose($file); } 6 khi mở một tệp lớn, có lẽ bạn muốn gói gọn vòng if ($file = fopen("file.txt", "r")) { while(!feof($file)) { $line = fgets($file); # do same stuff with the $line } fclose($file); } 6 bên trong trình tạo để tránh tải toàn bộ tệp vào bộ nhớ:

/** * @return Generator */ $fileData = function() { $file = fopen(__DIR__ . '/file.txt', 'r'); if (!$file) { return; // die() is a bad practice, better to use return } while (($line = fgets($file)) !== false) { yield $line; } fclose($file); };

Sử dụng nó như thế này:

foreach ($fileData() as $line) { // $line contains current line }

Bằng cách này, bạn có thể xử lý các dòng tệp riêng lẻ bên trong foreach ().

Lưu ý: Trình tạo yêu cầu> = Php 5.5

Đã trả lời ngày 27 tháng 3 năm 2017 lúc 17:54Mar 27, 2017 at 17:54

Oninthe oninThe Onin

4.5522 Huy hiệu vàng33 Huy hiệu bạc52 Huy hiệu Đồng2 gold badges33 silver badges52 bronze badges

5

Có một hàm if ($file = fopen("file.txt", "r")) { while(!feof($file)) { $line = fgets($file); # do same stuff with the $line } fclose($file); } 8 trả về một mảng các dòng có trong tệp.

foreach(file('myfile.txt') as $line) { echo $line. "\n"; }

Đã trả lời ngày 9 tháng 4 năm 2015 lúc 7:06Apr 9, 2015 at 7:06

7

Câu trả lời rõ ràng không có trong tất cả các câu trả lời. PHP có một trình phân tích cú pháp phân cách trực tuyến gọn gàng có sẵn cho chính xác mục đích đó.
PHP has a neat streaming delimiter parser available made for exactly that purpose.

$fp = fopen("/path/to/the/file", "r"); while (($line = stream_get_line($fp, 1024 * 1024, "\n")) !== false) { echo $line; } fclose($fp);

Đã trả lời ngày 21 tháng 6 năm 2018 lúc 20:46Jun 21, 2018 at 20:46

JohnjohnJohn

7.2483 Huy hiệu vàng49 Huy hiệu bạc51 Huy hiệu Đồng3 gold badges49 silver badges51 bronze badges

3

Sử dụng các kỹ thuật đệm để đọc tệp.

$filename = "test.txt"; $source_file = fopen( $filename, "r" ) or die("Couldn't open $filename"); while (!feof($source_file)) { $buffer = fread($source_file, 4096); // use a buffer of 4KB $buffer = str_replace($old,$new,$buffer); /// }

Đã trả lời ngày 6 tháng 11 năm 2012 lúc 8:23Nov 6, 2012 at 8:23

STARXSTARXStarx

76.1K45 Huy hiệu vàng181 Huy hiệu bạc259 Huy hiệu đồng45 gold badges181 silver badges259 bronze badges

3

foreach (new SplFileObject(__FILE__) as $line) { echo $line; }

Đã trả lời ngày 25 tháng 11 năm 2015 lúc 0:21Nov 25, 2015 at 0:21

1

Đây là cách tôi quản lý với tệp rất lớn (được thử nghiệm với tối đa 100g). Và nó nhanh hơn fgets ()

$block =1024*1024;//1MB or counld be any higher than HDD block_size*2 if ($fh = fopen("file.txt", "r")) { $left=''; while (!feof($fh)) {// read the file $temp = fread($fh, $block); $fgetslines = explode("\n",$temp); $fgetslines[0]=$left.$fgetslines[0]; if(!feof($fh) )$left = array_pop($lines); foreach ($fgetslines as $k => $line) { //do smth with $line } } } fclose($fh);

Đã trả lời ngày 4 tháng 8 năm 2017 lúc 13:24Aug 4, 2017 at 13:24

4

Hãy cẩn thận với công cụ 'while (! Vòng lặp kết thúc, kiểm tra FOEF; nếu không đúng, thì bạn đã gặp lỗi.

Đã trả lời ngày 28 tháng 1 năm 2014 lúc 21:14Jan 28, 2014 at 21:14

Cuse70Cuse70Cuse70

2633 Huy hiệu bạc5 Huy hiệu Đồng3 silver badges5 bronze badges

SplfiLeobject rất hữu ích khi nói đến việc xử lý các tệp lớn.

if ($file = fopen("file.txt", "r")) { while(!feof($file)) { $line = fgets($file); # do same stuff with the $line } fclose($file); } 0

Đã trả lời ngày 24 tháng 2 năm 2018 lúc 15:43Feb 24, 2018 at 15:43

Xanadevxanadevxanadev

7239 Huy hiệu bạc26 Huy hiệu Đồng9 silver badges26 bronze badges

Một trong những giải pháp phổ biến cho câu hỏi này sẽ có vấn đề với nhân vật dòng mới. Nó có thể được sửa chữa khá dễ dàng với một if ($file = fopen("file.txt", "r")) { while(!feof($file)) { $line = fgets($file); # do same stuff with the $line } fclose($file); } 9 đơn giản.

if ($file = fopen("file.txt", "r")) { while(!feof($file)) { $line = fgets($file); # do same stuff with the $line } fclose($file); } 1

Đã trả lời ngày 19 tháng 7 năm 2015 lúc 1:18Jul 19, 2015 at 1:18

1

if ($file = fopen("file.txt", "r")) { while(!feof($file)) { $line = fgets($file); # do same stuff with the $line } fclose($file); } 2

Đã trả lời ngày 23 tháng 6 năm 2019 lúc 15:07Jun 23, 2019 at 15:07

Chức năng đọc với return mảng

if ($file = fopen("file.txt", "r")) { while(!feof($file)) { $line = fgets($file); # do same stuff with the $line } fclose($file); } 3

Đã trả lời ngày 17 tháng 3 năm 2014 lúc 16:19Mar 17, 2014 at 16:19

1

Làm thế nào đọc dữ liệu theo từng dòng trong PHP?

Sử dụng Tệp () để đọc tệp. Bạn có thể sử dụng hàm File () trong PHP để đọc toàn bộ tệp cùng một lúc vào một mảng. Các phần tử mảng là các dòng riêng lẻ của tệp. Vì vậy, bạn sẽ có thể lặp lại các dòng trong tệp bằng cách lặp qua mảng.use the file() function in PHP to read the entire file at once into an array. The array elements are individual lines of the file. So you will be able to iterate over the lines in the file by iterating over the array.

Làm thế nào bạn có thể đọc một dòng tệp từng dòng và in ra nội dung trong PHP?

Chúng tôi sẽ sử dụng một số hoạt động tệp để đọc một dòng tệp lớn từng dòng và hiển thị nó ...
Đọc một tệp: Chúng tôi sẽ đọc tệp bằng cách sử dụng hàm fopen ().Hàm này được sử dụng để đọc và mở một tập tin.....
Traverse qua cuối tệp: Chúng ta có thể đi qua chức năng feof () ..

Làm cách nào để đọc một dòng tệp từng dòng?

Phương pháp 1: Đọc một dòng theo từng dòng bằng cách sử dụng readlines () readlines () được sử dụng để đọc tất cả các dòng trong một lần và sau đó trả về chúng dưới dạng mỗi dòng một phần tử chuỗi trong một danh sách.Hàm này có thể được sử dụng cho các tệp nhỏ, vì nó đọc toàn bộ nội dung tệp vào bộ nhớ, sau đó chia nó thành các dòng riêng biệt.using readlines() readlines() is used to read all the lines at a single go and then return them as each line a string element in a list. This function can be used for small files, as it reads the whole file content to the memory, then split it into separate lines.

Làm cách nào để làm cho dòng đầu tiên của một tệp chỉ đọc trong PHP?

Nếu bạn hoàn toàn biết tệp tồn tại, bạn có thể sử dụng một liner: $ line = fgets (fopen ($ file, 'r')));$line = fgets(fopen($file, 'r'));

Chủ đề