Tôi đang cố đọc một dòng cụ thể từ tệp văn bản bằng PHP. Đây là tệp văn bản:
foo
foo2
Làm thế nào tôi có được nội dung của dòng thứ hai bằng PHP? Điều này trả về dòng đầu tiên:
.. nhưng tôi cần cái thứ hai.
Mọi sự trợ giúp sẽ rất được trân trọng
Hỏi ngày 25 tháng 4 năm 2011 lúc 5:22Apr 25, 2011 at 5:22
$myFile = "4-24-11.txt";
$lines = file[$myFile];//file in to an array
echo $lines[1]; //line 2
Tệp - Đọc toàn bộ tệp vào một mảng
Máy xay
281K52 Huy hiệu vàng429 Huy hiệu bạc487 Huy hiệu đồng52 gold badges429 silver badges487 bronze badges
Đã trả lời ngày 25 tháng 4 năm 2011 lúc 5:25Apr 25, 2011 at 5:25
7
OMG Tôi đang thiếu 7 đại diện để đưa ra nhận xét. Đây là bình luận của @Raptor's & @TOMM, vì câu hỏi này vẫn xuất hiện cao trong Google SERPS.
Anh ấy hoàn toàn đúng. Đối với các tệp nhỏ
4 là hoàn toàn tốt. Đối với các tệp lớn, tổng số các mảng PHP B/C của Overkill, nó ăn bộ nhớ như điên.Tôi chỉ chạy một bài kiểm tra nhỏ với *.csv với kích thước tệp là ~ 67MB [1.000.000 dòng]:
$t = -microtime[1];
$file = '../data/1000k.csv';
$lines = file[$file];
echo $lines[999999]
."\n".[memory_get_peak_usage[1]/1024/1024]
."\n".[$t+microtime[1]];
//227.5
//0.22701287269592
//Process finished with exit code 0
Và vì không có ai đề cập đến nó, tôi đã thử
5, mà tôi thực sự vừa mới khám phá ra cho chính mình.$t = -microtime[1];
$file = '../data/1000k.csv';
$spl = new SplFileObject[$file];
$spl->seek[999999];
echo $spl->current[]
."\n".[memory_get_peak_usage[1]/1024/1024]
."\n".[$t+microtime[1]];
//0.5
//0.11500692367554
//Process finished with exit code 0
Đây là trên máy tính để bàn Win7 của tôi để nó không đại diện cho môi trường sản xuất, nhưng vẫn ... khá khác biệt.
Đã trả lời ngày 5 tháng 7 năm 2015 lúc 21:46Jul 5, 2015 at 21:46
Nimmneunnimmneunnimmneun
1.10914 Huy hiệu bạc16 Huy hiệu đồng14 silver badges16 bronze badges
2
Nếu bạn muốn làm theo cách đó ...
$line = 0;
while [[$buffer = fgets[$fh]] !== FALSE] {
if [$line == 1] {
// This is the second line.
break;
}
$line++;
}
Ngoài ra, hãy mở nó bằng
6 và đăng ký dòng với
7.Đã trả lời ngày 25 tháng 4 năm 2011 lúc 5:25Apr 25, 2011 at 5:25
OMG Tôi đang thiếu 7 đại diện để đưa ra nhận xét. Đây là bình luận của @Raptor's & @TOMM, vì câu hỏi này vẫn xuất hiện cao trong Google SERPS.alex
Anh ấy hoàn toàn đúng. Đối với các tệp nhỏ
4 là hoàn toàn tốt. Đối với các tệp lớn, tổng số các mảng PHP B/C của Overkill, nó ăn bộ nhớ như điên.197 gold badges867 silver badges975 bronze badges
2
Tôi chỉ chạy một bài kiểm tra nhỏ với *.csv với kích thước tệp là ~ 67MB [1.000.000 dòng]:
$file = new SplFileObject["filename"];
if [!$file->eof[]] {
$file->seek[$lineNumber];
$contents = $file->current[]; // $contents would hold the data from line x
}
Và vì không có ai đề cập đến nó, tôi đã thử
5, mà tôi thực sự vừa mới khám phá ra cho chính mình.Feb 25, 2016 at 21:15
Đây là trên máy tính để bàn Win7 của tôi để nó không đại diện cho môi trường sản xuất, nhưng vẫn ... khá khác biệt.Phil
Đã trả lời ngày 5 tháng 7 năm 2015 lúc 21:468 gold badges58 silver badges103 bronze badges
1
Nimmneunnimmneun
$handle = @fopen['test.txt', "r"];
if [$handle] {
while [!feof[$handle]] {
$lines[] = fgets[$handle, 4096];
}
fclose[$handle];
}
print_r[$lines];
1.10914 Huy hiệu bạc16 Huy hiệu đồng
Nếu bạn muốn làm theo cách đó ...
Ngoài ra, hãy mở nó bằng
6 và đăng ký dòng với
7.32 gold badges108 silver badges208 bronze badges
AlexalexApr 25, 2011 at 5:32
468K197 Huy hiệu vàng867 Huy hiệu bạc975 Huy hiệu Đồngbalanv
Tôi sẽ sử dụng lớp splfileobject ...27 gold badges90 silver badges137 bronze badges
1
$myFile = "4-21-11.txt";
$fh = fopen[$myFile, 'r'];
while[!feof[$fh]]
{
$data[] = fgets[$fh];
//Do whatever you want with the data in here
//This feeds the file into an array line by line
}
fclose[$fh];
Đã trả lời ngày 25 tháng 2 năm 2016 lúc 21:15Apr 25, 2011 at 5:27
PhilPhilPhoenix
3.9498 Huy hiệu vàng58 Huy hiệu bạc103 Huy hiệu Đồng1 gold badge19 silver badges13 bronze badges
2
Bạn có thể sử dụng các mục sau để có tất cả các dòng trong tệp
và
8 cho dòng thứ hai của bạnMắt rắnDec 19, 2016 at 2:54
15.8K32 Huy hiệu vàng 108 Huy hiệu bạc208 Huy hiệu đồngcantelope
Đã trả lời ngày 25 tháng 4 năm 2011 lúc 5:327 silver badges9 bronze badges
Balanvbalanv
010,5K27 Huy hiệu vàng90 Huy hiệu bạc137 Huy hiệu đồng
Đã trả lời ngày 25 tháng 4 năm 2011 lúc 5:27Oct 12, 2015 at 11:42
Phoenixphoenixmineroot
4,4281 Huy hiệu vàng19 Huy hiệu bạc13 Huy hiệu đồng15 silver badges23 bronze badges
1
Câu hỏi này khá cũ, nhưng đối với bất kỳ ai đối phó với các tệp rất lớn, đây là một giải pháp không liên quan đến việc đọc mọi dòng trước đó. Đây cũng là giải pháp duy nhất hoạt động trong trường hợp của tôi cho một tệp với ~ 160 triệu dòng.
1Đã trả lời ngày 25 tháng 4 năm 2011 lúc 5:25Apr 25, 2011 at 5:25
OMG Tôi đang thiếu 7 đại diện để đưa ra nhận xét. Đây là bình luận của @Raptor's & @TOMM, vì câu hỏi này vẫn xuất hiện cao trong Google SERPS.Rikesh
Anh ấy hoàn toàn đúng. Đối với các tệp nhỏ
4 là hoàn toàn tốt. Đối với các tệp lớn, tổng số các mảng PHP B/C của Overkill, nó ăn bộ nhớ như điên.14 gold badges77 silver badges86 bronze badges
0
Tôi chỉ chạy một bài kiểm tra nhỏ với *.csv với kích thước tệp là ~ 67MB [1.000.000 dòng]:
Và vì không có ai đề cập đến nó, tôi đã thử
5, mà tôi thực sự vừa mới khám phá ra cho chính mình.
2Đây là trên máy tính để bàn Win7 của tôi để nó không đại diện cho môi trường sản xuất, nhưng vẫn ... khá khác biệt.Nov 3, 2015 at 1:07
Đã trả lời ngày 5 tháng 7 năm 2015 lúc 21:46
3
NimmneunnimmneunNov 28, 2015 at 15:17
1.10914 Huy hiệu bạc16 Huy hiệu đồngdrugan
Nếu bạn muốn làm theo cách đó ...8 silver badges10 bronze badges
Ngoài ra, hãy mở nó bằng
6 và đăng ký dòng với
7.
9AlexalexJan 27, 2021 at 17:44