2014-12-07 71 views
0

我試圖打開一個文件並確定它是否有效。如果第一行是START並且最後一行是END,則它是有效的。什麼是讀取文件的第一行和最後一行的最有效的PHP方式?

我見過不同的方式獲取文件的最後一行,但它並沒有特別關注第一行。

我應該怎麼辦?我正在考慮加載數組中的文件內容並檢查$ array [0]和$ array [x]作爲START和END。但這似乎是對所有可能在中間的垃圾的浪費。

如果它是一個有效的文件,我將在START和END之間讀取/處理文件內容。

+1

使用'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

+0

也許有用:[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

回答

-1

這是從我:

$lines = file($pathToFile); 
if ($lines[0] == 'START' && end($lines) == 'END') { 
    // do stuff 
} 
+0

文件將整個文件讀入一個數組。如果它超過〜50K行,大多數默認的PHP設置將不支持該長度的數組。 – 2014-12-07 20:51:32

+0

@NickMaroulis是否會以任何方式干擾OP問題? – Forien 2014-12-07 20:53:18

+0

它會工作,但OP要求一個有效的方法。 – 2014-12-07 20:55:26

1

不要讀整個文件到一個數組,如果不需要的話。如果文件可大了,你可以這樣做的:

$h = fopen('text.txt', 'r'); 
$firstLine = fgets($h); 
fseek($h, -3, SEEK_END); 
$lastThreeChars = fgets($h); 

內存佔用低得多

+0

爲什麼這個被低估? – Mike 2014-12-07 20:59:37

+0

wasent我,但效率低下 – 2014-12-07 21:04:43

+1

fseek與SEEK_END比遍歷所有行更好 – 2014-12-07 21:08:46

-1

讀取整個文件用於fgets將高效的小型西萊斯。如果烏拉圭回合文件特別大,則:

  1. 打開並閱讀第一線
  2. 使用尾(我沒有檢查它,但它看起來OK)功能我php.net發現FSEEK文檔中
相關問題