Вы не зашли.
Главная » PHP » Помогите с чтением большых фалов
#1. TLENS Off (14)
Moderator
2009.12.29 16:04
Вот ситуация такова немогу обработать файл до конца
Код:
lt;?$fr=fopen('file1','r');$fp=fopen('file2','a');$i=0;while(!feof($fr) || $i==50) { ++$i; $f=fread($fr, 102400)//Обработка $f fputs($fp,$f); unset($f); }fclose($fr);fclose($fp);
Сервер обработает гдето 48 мб.
Вопрос как продолжить обработку при новом обновлении например:
fillesize('file1'); //=800mb а
filesize('file2'); //=48mb
Как начать обработку с filesize('file2') а не с начала?
Отредактировано TLENS (2009.12.29 16:04)
#2. Gemorroj Off (107)
Administrator
2009.12.29 16:04
сколько по времени занимает обработка? вероятно, дело не в расходе оперативной памяти, а превышении максимального отведенного времени на работу скрипта.
банально set_time_limit
#3. TLENS Off (14)
Moderator
2009.12.29 16:04
Да нет оперативку же сразу после записи чищу.
Грузит долго потом таймаут.
Док вот чего я и хочу чтобы обработать кусочками по 5 мб за одно выполнение.
Но fread() при новом выполнении начинает обрабатывать сначала.
Вопрос состоит в том можно ли указать фрейду с какого места начинать. например как в дозагрузке Рангес bites='.filesize('file2').'-'.filesize('file1');
ну если фрейд такого не умеет может какаято другая функция?
Отредактировано TLENS (2009.12.29 16:04)
#4. Gemorroj Off (107)
Administrator
2009.12.29 17:05
http://ru.php.net/manual/en/function.fseek.php
#5. TLENS Off (14)
Moderator
2009.12.29 17:05
Спасибо то что надо.
вот только там написано что функця не смещает если соединение открыто через http Почему так у меня сместило?
#6. Gemor
Гость
2009.12.29 18:06
Где такое написано?
#7. TLENS Off (14)
Moderator
2009.12.29 22:10
На php.su текстовый с текстовым файлом работаетпа вот бинарный не хочет отступить хоть и флажок стоит rb есть еще подобная функция?
#8. Gemor
Гость
2009.12.29 22:10
Доки читай на php.net а не php.su
флаг b требуется только на винде. код давай.
#9. TLENS Off (14)
Moderator
2009.12.29 22:10
Код:
span style="color: #0000BB"><?php$fn='http://f.spaces.ru/fff/3147604116015502/0/871924/spaces_ru_871924.mp3';$name=preg_replace('/.*\//si','',$fn);$potok=1000;$h=get_headers($fn);$getsize=(int)preg_replace('/.*Content-Length:.(.*?)\|.*/si','$1',implode('|',$h));$filesize=@filesize($name); $fr=fopen($fn,'rb'); $fp=fopen($name,'ab'); if($filesize<$getsize) { @fseek($fr, $filesize); while(!feof($fr)) { ++$i; $f=fread($fr, 1024); fputs($fp,$f); unset($f); if($i==$potok){break;} } } else { echo 'ok'; } fclose($fp); fclose($fr);echo filesize($name);echo'<META HTTP-EQUIV="REFRESH" CONTENT="0">';?>
#10. TLENS Off (14)
Moderator
2009.12.29 23:11
Почему ето mp3шку кусками зописало тоить з кусочка вклеяны в одно токо начало
Отредактировано TLENS (2009.12.30 04:04)
#11. TLENS Off (14)
Moderator
2009.12.29 23:11
Блин дак он почему и текстовий не клеит полностью до 1400 байт дошол и заново начал че написал не таК
Отредактировано TLENS (2009.12.29 23:11)
#12. TLENS Off (14)
Moderator
2009.12.30 01:01
Вот вчем проблема
Что означает денная ошибка и как ее исправить?
fseek() [function.fseek]: stream does not support seeking in  on line 13
Отредактировано TLENS (2009.12.30 04:04)
#13. TLENS Off (14)
Moderator
2009.12.31 01:01
Почему ставлю
Код:
lt;?$fr=fopen($fn,'r');fseek($fr,1000);
Работает меняю на
Код:
lt;?$fr=fopen($fn,'r');fseek($fr,1500);
Дает ошибку что выше написал.
Дак ето правда что fseek не работает с http, может есть другая водможность загруски с докачкой?
#14. Gemorroj Off (107)
Administrator
2009.12.31 01:01
само собой. докачивать так, как указано в HTTP протоколе. т.е. использовать заголовок Range.
На счет того, поддерживается ли seek с http протоколом, точно не скажу. Логично было бы предположить самую обычную работу с ресурсом, но на практике действительно есть проблемы.
#15. TLENS Off (14)
Moderator
2009.12.31 03:03
Вот какраз сидел искал инфмацию о рангес как задавать я знаю но немогу понять куда что ставить и вопрос на убеждение лутче юать курл или fsoockopen что меньше берет ресурсов оперативы и что быстрее импортирует но я думаю что курл и втом и втом лутче, ето так?
#16. Gemorroj Off (107)
Administrator
2009.12.31 10:10
чтобы точно ответить на этот вопрос, нужно проделать опыт с этими 2 вариантами. а в целом, я так же склоняюсь к CURL.
#17. TLENS Off (14)
Moderator
2010.01.03 01:01
Как лутче отделить заглавки от фала чтобы не повредить файл.
#18. Gemorroj Off (107)
Administrator
2010.01.03 11:11
1) CURLOPT_HEADER - поставить false
2)
Код:
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headers = substr($output, 0, $header_size - 4);
$body = substr($output, $header_size);
#19. TLENS Off (14)
Moderator
2010.01.04 03:03
Чото с курлом невышло ето хотинг крывой пора уже на новый
фсок решил юзать только как там заголовки неотделю
Код:
$f=preg_replace('/.*?\r\n\r\n/si','',$get);
$h=preg_replace('/(.*?)\r\n\r\n.*/si','$1',$get);
но ето не выходрегулярка грузит копец мож подругому можна розделить а?
Отредактировано TLENS (2010.01.04 03:03)
#20. Gemorroj Off (107)
Administrator
2010.01.04 12:12
explode
#21. TLENS Off (14)
Moderator
2010.01.04 14:02
Но тут тоже думать надо бинарный файл может содержать кучу новых строк. В прынципе есть идея ща попробую спассибо
#22. Gemorroj Off (107)
Administrator
2010.01.04 16:04
это не важно.
1 элемент будет с заголовками, остальное соединяешь обратно с помощью implode
Страниц: 1 2 3 Все
Главная
WEB
PunBB Mod v0.6.2
0.020 s