我有一個209MB的.txt文件,其中大約95,000行會自動推送到我的服務器,每週更新一次我的網站上的一些內容。問題是我無法分配足夠的內存來處理這樣一個大文件,所以我想將大文件分解成每個有5000行的較小文件。使用PHP將大文件分解爲許多較小的文件
我不能使用file(),直到文件被分解成更小的部分,所以我一直在使用SplFileObject。但我沒有得到它。這裏是我想要實現的一些僞代碼:
read the file contents
while there are still lines left to be read in the file
create a new file
write the next 5000 lines to this file
close this file
for each file created
run mysql update queries with the new content
delete all of the files that were created
該文件爲csv格式。
編輯:下面是用於讀取線下面給出的答案文件的解決方案:
function getLine($number) {
global $handle, $index;
$offset = $index[$number];
fseek($handle, $offset);
return explode("|",fgets($handle));
}
$handle = @fopen("content.txt", "r");
while (false !== ($line = fgets($handle))) {
$index[] = ftell($handle);
}
print_r(getLine(18437));
fclose($handle);
你正在嘗試什麼樣的處理?通過`fopen`和`fgets`進行讀取應該可以正常工作,除非您試圖將其全部存儲在數組中。 – mfonda 2011-01-14 18:18:17
借調`fgets`。這樣你可以一行一行地讀取,而不需要將整個文件加載到內存中。 – Fanis 2011-01-14 18:19:24