2008-10-27 4 views
3
$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"; 
} 

Когда я запустил это, скрипт заканчивается потреблением ~ 200 МБ ОЗУ после прохождения всего 35 МБ файла.Обработка больших (более 1 гигабайт) файлов в PHP с использованием stream_filter_ *

Запуск его без прошивки stream_filter с постоянной площадью памяти ~ 10 МБ.

Что дает?

ответ

0

Из того, что я читаю here, вы не используете stream_filter_prepend() правильно, хотя может быть что-то непонятное в процессе.

Элс, я не совсем уверен, но я готов поспорить, что это связано скорее с тем, что iconv - это дорогостоящий процесс, и меньше связан с тем, что вы используете его как фильтр потока.

Удачи.

1

Вам нужно только зарегистрировать настраиваемые фильтры. iconv встроен. Это не особая операция, использование фильтра потока для rot13 демонстрирует подобное поведение.

0

Любые конкретные причины, по которым вы хотите использовать stream_filter_prepend()? Если это вызывает проблемы с памятью, тогда я найду другой способ сделать то, что он делает.

 Смежные вопросы

  • Нет связанных вопросов^_^