我試圖打開一個文件並確定它是否有效。如果第一行是START並且最後一行是END,則它是有效的。什麼是讀取文件的第一行和最後一行的最有效的PHP方式?
我見過不同的方式獲取文件的最後一行,但它並沒有特別關注第一行。
我應該怎麼辦?我正在考慮加載數組中的文件內容並檢查$ array [0]和$ array [x]作爲START和END。但這似乎是對所有可能在中間的垃圾的浪費。
如果它是一個有效的文件,我將在START和END之間讀取/處理文件內容。
我試圖打開一個文件並確定它是否有效。如果第一行是START並且最後一行是END,則它是有效的。什麼是讀取文件的第一行和最後一行的最有效的PHP方式?
我見過不同的方式獲取文件的最後一行,但它並沒有特別關注第一行。
我應該怎麼辦?我正在考慮加載數組中的文件內容並檢查$ array [0]和$ array [x]作爲START和END。但這似乎是對所有可能在中間的垃圾的浪費。
如果它是一個有效的文件,我將在START和END之間讀取/處理文件內容。
這是從我:
$lines = file($pathToFile);
if ($lines[0] == 'START' && end($lines) == 'END') {
// do stuff
}
文件將整個文件讀入一個數組。如果它超過〜50K行,大多數默認的PHP設置將不支持該長度的數組。 – 2014-12-07 20:51:32
@NickMaroulis是否會以任何方式干擾OP問題? – Forien 2014-12-07 20:53:18
它會工作,但OP要求一個有效的方法。 – 2014-12-07 20:55:26
不要讀整個文件到一個數組,如果不需要的話。如果文件可大了,你可以這樣做的:
$h = fopen('text.txt', 'r');
$firstLine = fgets($h);
fseek($h, -3, SEEK_END);
$lastThreeChars = fgets($h);
內存佔用低得多
爲什麼這個被低估? – Mike 2014-12-07 20:59:37
wasent我,但效率低下 – 2014-12-07 21:04:43
fseek與SEEK_END比遍歷所有行更好 – 2014-12-07 21:08:46
讀取整個文件用於fgets將高效的小型西萊斯。如果烏拉圭回合文件特別大,則:
使用'fgets'來讀取第一行。爲最後一行請參閱http://stackoverflow.com/questions/15025875/what-is-the-best-way-in-php-to-read-last-lines-from-a-file/15025877#15025877 – FuzzyTree 2014-12-07 20:48:30
也許有用:[6451232 /讀大文件從頭](https://stackoverflow.com/questions/6451232/reading-large-files-from-end)。另請參閱[文件查找:查看從末尾快速訪問文件的示例](http://php.net/manual/en/function.fseek.php)。 – 2014-12-07 21:11:50