Bu büyük dosyalar üzerinde bu kadar korkunç kılan () PHP'nin fgets hakkında nedir?

1 Cevap php

Bu büyük dosyalar üzerinde bu kadar korkunç kılan vs fread fgets() uygulanması hakkında nedir?

Göstermek için, bu kodu çalıştırın:

<?php
$line = str_repeat('HelloWorld', 100000) . "\n";
for($i=0; $i<10000; ++$i)
    file_put_contents('myfile', $line, FILE_APPEND);
//now we have roughly a 1gig file

// We'll even let fread go first incase
// the subsequent test would have any caching benefits
$fp = fopen('myfile2','r');
$start = microtime(true);
while (fread($fp,4096));
$end = microtime(true);
print ($end-$start) . " using fread\n";
fseek($fp, 0);

$start = microtime(true);
while (fgets($fp));
$end = microtime(true);
print ($end-$start) . " using fgets\n";
?>

1 Cevap

Bu fgets diyorsun nasıl bir ilgisi olabilir. Manuel, diyor ki dışarı ikinci parametresini bırakırsanız, o zaman:

Hiçbir uzunluk belirtilirse, o satırın sonuna ulaşıncaya kadar akışından okumaya devam edecektir.

Senin ile çalışan veri bazı çok uzun satırları (örneğin: "MerhabaDünya" 100,000 adet = 1.000.000 karakter) varsa, o zaman bu her şeyi okumak zorunda.

Yine, manuel:

Dosyadaki satırların çoğunluğu tüm 8KB daha büyükse, o maksimum hat uzunluğunu belirtmek için komut dosyası için daha verimli olabilir.