• Главная
  • » PHP
  • » Помогите с чтением большых фалов

#1 2009.12.29 16:06

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Помогите с чтением большых фалов

Вот ситуация такова немогу обработать файл до конца

Код:

1
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:13)

Неактивен

#2 2009.12.29 16:13

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Помогите с чтением большых фалов

сколько по времени занимает обработка? вероятно, дело не в расходе оперативной памяти, а превышении максимального отведенного времени на работу скрипта.
банально set_time_limit

Неактивен

#3 2009.12.29 16:44

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

Да нет оперативку же сразу после записи чищу.
Грузит долго потом таймаут.
Док вот чего я и хочу чтобы обработать кусочками по 5 мб за одно выполнение.
Но fread() при новом выполнении начинает обрабатывать сначала.
Вопрос состоит в том можно ли указать фрейду с какого места начинать. например как в дозагрузке Рангес bites='.filesize('file2').'-'.filesize('file1');
ну если фрейд такого не умеет может какаято другая функция?

Отредактировано TLENS (2009.12.29 16:45)

Неактивен

#4 2009.12.29 17:01

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Помогите с чтением большых фалов

Неактивен

#5 2009.12.29 17:12

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

Спасибо то что надо.
вот только там написано что функця не смещает если соединение открыто через http Почему так у меня сместило?

Неактивен

#6 2009.12.29 18:37

Gemor
Гость

Re: Помогите с чтением большых фалов

Где такое написано?

#7 2009.12.29 22:19

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

На php.su текстовый с текстовым файлом работаетпа вот бинарный не хочет отступить хоть и флажок стоит rb есть еще подобная функция?

Неактивен

#8 2009.12.29 22:27

Gemor
Гость

Re: Помогите с чтением большых фалов

Доки читай на php.net а не php.su
флаг b требуется только на винде. код давай.

#9 2009.12.29 22:50

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

Код:

1
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 2009.12.29 23:05

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

Почему ето mp3шку кусками зописало тоить з кусочка вклеяны в одно токо начало

Отредактировано TLENS (2009.12.30 04:37)

Неактивен

#11 2009.12.29 23:45

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

Блин дак он почему и текстовий не клеит полностью до 1400 байт дошол и заново начал че написал не таК

Отредактировано TLENS (2009.12.29 23:47)

Неактивен

#12 2009.12.30 01:33

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

Вот вчем проблема
Что означает денная ошибка и как ее исправить?
fseek() [function.fseek]: stream does not support seeking in  on line 13

Отредактировано TLENS (2009.12.30 04:39)

Неактивен

#13 2009.12.31 01:21

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

Почему ставлю

Код:

1
lt;?$fr=fopen($fn,'r');fseek($fr,1000);

Работает меняю на

Код:

1
lt;?$fr=fopen($fn,'r');fseek($fr,1500);

Дает ошибку что выше написал.
Дак ето правда что fseek не работает с http, может есть другая водможность загруски с докачкой?

Неактивен

#14 2009.12.31 01:40

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Помогите с чтением большых фалов

само собой. докачивать так, как указано в HTTP протоколе. т.е. использовать заголовок Range.
На счет того, поддерживается ли seek с http протоколом, точно не скажу. Логично было бы предположить самую обычную работу с ресурсом, но на практике действительно есть проблемы.

Неактивен

#15 2009.12.31 03:36

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

Вот какраз сидел искал инфмацию о рангес как задавать я знаю но немогу понять куда что ставить и вопрос на убеждение лутче юать курл или fsoockopen что меньше берет ресурсов оперативы и что быстрее импортирует но я думаю что курл и втом и втом лутче, ето так?

Неактивен

#16 2009.12.31 10:56

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Помогите с чтением большых фалов

чтобы точно ответить на этот вопрос, нужно проделать опыт с этими 2 вариантами. а в целом, я так же склоняюсь к CURL.

Неактивен

#17 2010.01.03 01:22

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

Как лутче отделить заглавки от фала чтобы не повредить файл.

Неактивен

#18 2010.01.03 11:38

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Помогите с чтением большых фалов

1) CURLOPT_HEADER - поставить false
2)

Код:

1
2
3
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headers = substr($output, 0, $header_size - 4);
$body = substr($output, $header_size);

Неактивен

#19 2010.01.04 03:19

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

Чото с курлом невышло ето хотинг крывой пора уже на новый
фсок решил юзать только как там заголовки неотделю

Код:

1
2
$f=preg_replace('/.*?\r\n\r\n/si','',$get);
$h=preg_replace('/(.*?)\r\n\r\n.*/si','$1',$get);

но ето не выходрегулярка грузит копец мож подругому можна розделить а?

Отредактировано TLENS (2010.01.04 03:22)

Неактивен

#20 2010.01.04 12:48

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Помогите с чтением большых фалов

explode

Неактивен

#21 2010.01.04 14:58

TLENS
Moderator
Откуда: Украина
Зарегистрирован: 2009.04.05
Сообщений: 2402
Карма: 14
Профиль

Re: Помогите с чтением большых фалов

Но тут тоже думать надо бинарный файл может содержать кучу новых строк. В прынципе есть идея ща попробую спассибо

Неактивен

#22 2010.01.04 16:27

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: Помогите с чтением большых фалов

это не важно.
1 элемент будет с заголовками, остальное соединяешь обратно с помощью implode

Неактивен

  • Главная
  • » PHP
  • » Помогите с чтением большых фалов

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.018 s