使用stream_filter_ *在PHP中处理大型(超过1 Gig)文件

时间:2008-10-27 22:58:50

标签: php stream large-files

$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";
} 

当我运行此脚本时,脚本在完成35MB的文件后最终消耗了大约200 MB的RAM。

在没有stream_filter的情况下运行它,直接使用~10 MB的常量内存占用。

是什么给出了?

3 个答案:

答案 0 :(得分:1)

您只需注册自定义过滤器。 iconv是内置的。这不是特定的操作,使用rot13的流过滤器表现出类似的行为。

答案 1 :(得分:0)

从我正在阅读的内容here,您没有正确实施stream_filter_prepend(),尽管我可能会对此过程产生误解。

Als,我不完全确定,但我愿意打赌,这更多地与iconv是一个昂贵的过程这一事实有关,而与你将它用作流的事实关系不大过滤

祝你好运。

答案 2 :(得分:0)

您想使用stream_filter_prepend()的任何特殊原因?如果它导致内存问题,那么我会找到另一种方法来做它所做的事情。