I'm trying to read a specific line from a text file using php. Here's the text file:
foo
foo2
How would I get the content of the second line using php? This returns the first line:
..but I need the second.
Any help would be greatly appreciated
asked Apr 25, 2011 at 5:22
$myFile = "4-24-11.txt";
$lines = file[$myFile];//file in to an array
echo $lines[1]; //line 2
file — Reads entire file into an array
Blender
280k52 gold badges426 silver badges487 bronze badges
answered Apr 25, 2011 at 5:25
7
omg I'm lacking 7 rep to make comments. This is @Raptor's & @Tomm's comment, since this question still shows up way high in google serps.
He's exactly right. For small files file[$file];
is perfectly fine. For large files it's total overkill b/c php arrays eat memory like crazy.
I just ran a tiny test with a *.csv with a file size of ~67mb [1,000,000 lines]:
$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
And
since noone mentioned it yet, I gave the SplFileObject
a try, which I actually just recently discovered for myself.
$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
This was on my Win7 desktop so it's not representative for production environment, but still ... quite the difference.
answered Jul 5, 2015 at 21:46
nimmneunnimmneun
1,10914 silver badges16 bronze badges
2
If you wanted to do it that way...
$line = 0;
while [[$buffer = fgets[$fh]] !== FALSE] {
if [$line == 1] {
// This is the second line.
break;
}
$line++;
}
Alternatively, open it with
file[]
and subscript the line with [1]
.
answered Apr 25, 2011 at 5:25
alexalex
467k197 gold badges865 silver badges975 bronze badges
2
I would use the SplFileObject class...
$file = new SplFileObject["filename"];
if [!$file->eof[]] {
$file->seek[$lineNumber];
$contents = $file->current[]; // $contents would hold the data from line x
}
answered Feb 25, 2016 at 21:15
PhilPhil
3,9498 gold badges58 silver badges103 bronze badges
1
you can use the following to get all the lines in the file
$handle = @fopen['test.txt', "r"];
if [$handle] {
while [!feof[$handle]] {
$lines[] = fgets[$handle, 4096];
}
fclose[$handle];
}
print_r[$lines];
and $lines[1]
for your second line
Snake Eyes
15.8k32 gold badges107 silver badges208 bronze badges
answered Apr 25, 2011 at 5:32
balanvbalanv
10.5k27 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];
answered Apr 25, 2011 at 5:27
PhoenixPhoenix
4,4181 gold badge19 silver badges13 bronze badges
2
This question is quite old by now, but for anyone dealing with very large files, here is a solution that does not involve reading every preceding line. This was also the only solution that worked in my case for a file with ~160 million lines.
It works by opening the file without reading anything, then moving the pointer instantly to a random position, reading up to 4096 characters from that point, then grabbing the first complete line from that data.
answered Dec 19, 2016 at 2:54
cantelopecantelope
1,1277 silver badges9 bronze badges
If you use PHP on Linux, you may try the following to read text for example between 74th and 159th lines:
$text = shell_exec["sed -n '74,159p' path/to/file.log"];
This solution is good if your file is large.
answered Oct 12, 2015 at 11:42
minerootmineroot
1,58715 silver badges23 bronze badges
1
You have to loop the file till end of file.
while[!feof[$file]]
{
echo fgets[$file]. "
";
}
fclose[$file];
answered Apr 25, 2011 at 5:25
RikeshRikesh
25.8k14 gold badges77 silver badges86 bronze badges
0
You could try looping until the line you want, not the EOF, and resetting the variable to the line each time [not adding to it]. In your case, the 2nd line is the EOF. [A for loop is probably more appropriate in my code below].
This way the entire file is not in the memory; the drawback is it takes time to go through the file up to the point you want.
answered Nov 3, 2015 at 1:07
I like daggett answer but there is another solution you can get try if your file is not big enough.
$file = __FILE__; // Let's take the current file just as an example.
$start_line = __LINE__ -1; // The same with the line what we look for. Take the line number where $line variable is declared as the start.
$lines_to_display = 5; // The number of lines to display. Displays only the $start_line if set to 1. If $lines_to_display argument is omitted displays all lines starting from the $start_line.
echo implode['', array_slice[file[$file], $start_line, lines_to_display]];
answered Nov 28, 2015 at 15:17
drugandrugan
7208 silver badges10 bronze badges
I searched for a one line solution to read specific line from a file. Here my solution:
echo file['dayInt.txt'][1]
answered Jan 27, 2021 at 17:44