Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

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

Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

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);
}

Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

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

CodaddictCodaddictcodaddict

435K80 Huy hiệu vàng487 Huy hiệu bạc524 Huy hiệu đồng80 gold badges487 silver badges524 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

Syuaa Sesyuaa SESyuaa SE

1.6111 Huy hiệu vàng9 Huy hiệu bạc2 Huy hiệu đồng1 gold badge9 silver badges2 bronze badges

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 http://php.net/manual/en/splfileObject.fgets.php (Php 5> = 5.1.0)SplFileObject http://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;

Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

Sẽ

23.1K13 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

Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

elshnkhllelshnkhllelshnkhll

1.9921 Huy hiệu vàng18 Huy hiệu bạc22 Huy hiệu đồng1 gold badge18 silver badges22 bronze badges

6

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

Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

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

Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

Oninthe oninThe Onin

4.4822 Huy hiệu vàng33 Huy hiệu bạc 50 Huy hiệu Đồng2 gold badges33 silver badges50 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";
}

Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

Đã 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.1713 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

75,8K45 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

Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

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

Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

Xanadevxanadevxanadev

7139 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

Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

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

Hướng dẫn write a php script to read from a file line by line - viết một tập lệnh php để đọc từ một tập tin từng dòng một

1

Chức năng nào được sử dụng để đọc dòng tệp PHP từng dòng?

Hàm fgets () được sử dụng để đọc một dòng từ một tệp.fgets() function is used to read a single line from a file.

Chức năng nào sẽ đọc từ một dòng từng dòng và trả lại danh sách?

Phương thức readline () sẽ đọc một dòng từ tệp và trả về nó.Phương thức Readlines () sẽ đọc và trả về danh sách tất cả các dòng trong tệp.readline() method is going to read one line from the file and return that. The readlines() method will read and return a list of all of the lines in the file.

Làm cách nào để đọc tệp PHP?

Vì vậy, đây là các bước cần thiết để đọc một tệp với PHP ...
Mở tệp bằng hàm fopen () ..
Nhận độ dài của tệp bằng hàm fileSize () ..
Đọc nội dung của tệp bằng hàm fread () ..
Đóng tệp với hàm fclose () ..

FGETS PHP là gì?

Định nghĩa và sử dụng hàm fget () trả về một dòng từ một tệp mở.returns a line from an open file.