TLENS » 2009.12.29 16:06

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

Код:

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') а не с начала?

Gemorroj » 2009.12.29 16:13

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

TLENS » 2009.12.29 16:44

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

Gemorroj » 2009.12.29 17:01

http://ru.php.net/manual/en/function.fseek.php

TLENS » 2009.12.29 17:12

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

Gemor » 2009.12.29 18:37

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

TLENS » 2009.12.29 22:19

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

Gemor » 2009.12.29 22:27

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

TLENS » 2009.12.29 22:50

Код:

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">';?>
TLENS » 2009.12.29 23:05

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

TLENS » 2009.12.29 23:45

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

TLENS » 2009.12.30 01:33

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

TLENS » 2009.12.31 01:21

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

Код:

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

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

Код:

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

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

Gemorroj » 2009.12.31 01:40

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

TLENS » 2009.12.31 03:36

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

Gemorroj » 2009.12.31 10:56

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

TLENS » 2010.01.03 01:22

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

Gemorroj » 2010.01.03 11:38

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);
TLENS » 2010.01.04 03:19

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

Код:

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

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

Gemorroj » 2010.01.04 12:48

explode

TLENS » 2010.01.04 14:58

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

Gemorroj » 2010.01.04 16:27

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