Ben otomatik olarak benim web sitesinde bazı içeriğini güncellemek için haftada bir kez benim sunucuya itti yaklaşık 95.000 hatları ile 209MB. Txt dosyası var. Sorun böyle büyük bir dosyayı işlemek için yeterli bellek ayrılamıyor, bu yüzden 5.000 hatları her ile daha küçük dosyalar halinde büyük bir dosya kırmak istiyorum.
Dosya küçük parçalara ayrılır kadar ben tüm dosya () kullanamazsınız, bu yüzden SplFileObject ile çalışıyoruz. Ama ben onunla hiçbir yerde aldık. Burada başarmak istediğiniz bazı pseudocode bulunuyor:
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
Dosya csv formatında.
EDIT: Aşağıda verilen cevaplar çizgi ile dosya okuma için çözüm:
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);