* Stream_filter_ PHP kullanarak büyük (üzerinde 1 Gig) dosyalarını işleme

3 Cevap php
$fp_src=fopen('file','r');

$filter = stream_filter_prepend($fp_src, 'convert.iconv.ISO-8859-1/UTF-8');

while(fread($fp_src,4096)){
    ++$count;
    if($count%1000==0) print ftell($fp_src)."\n";
}

Ben bu çalıştırdığınızda komut sadece 35MB dosya geçtikten sonra RAM ~ 200 MB tüketen biter.

~ 10 MB sabit bellek ayak izi ile sağ aracılığıyla stream_filter fermuarlar olmadan Koşu.

Ne verir?

3 Cevap

Sadece özel filtreler kaydetmeniz gerekir. Bu rot13 sergiler benzer davranışları için bir akış filtresi kullanırken, belirli bir işlem değildir içeri iconv inşa edilmiştir.

Süreci hakkında ben yanlış bir şey olabilir, ancak ben okuyorum ne here, sen, stream_filter_prepend() doğru uygulama değildir.

Als, tamamen emin değilim, ama bu iconv pahalı bir süreç olduğunu ve dere filtre olarak kullanarak konum gerçeği ile yapmak için daha az olduğu gerçeği ile yapmak için daha fazla bahse hazırım.

İyi şanslar.

Eğer stream_filter_prepend () kullanmak istediğiniz herhangi bir özel nedeni var mı? Bellek sorunlarına yol eğer, o zaman ben ne yapmak için başka bir yol bulmak istiyorum.