Отдача файлов PHP скриптов

Ярослав

Новичок
Здравствуйте.

Возникла проблема в отдаче больших файлов. Сервер начинает загибаться.
На данный момент файлы отдаю на подобии:
PHP:
 $downloaded = 0;
 while(!feof($f) and !connection_status() and ($downloaded < $size))
  {
    echo fread($f, 512000);
    downloaded += 512000;
    flush();
  }
Была бы статика, про проблему можно было бы забыть используя nginx.
Сам файл очень интерестный. Он как бы складываеться из двух частей.
Первая часть динамическая. Например нужно изменить определенный токен в файле.
Вторая часть - статика. Тоисть после отдачи первой части можна было бы пустить в бой nginx.
Только вот проблема - незнаю как связать все это в кучу.
Читал что можно контроллировать доступ с помощю апача и потом редиректить на нгинкс через X-Accel-Redirect. Но я не могу выдать динамику до того момента как пошлю X-Accel-Redirect.
Какие решения сучествуют?

PS. Установить какой-нибудь модуль/разширение не проблема.
 

zerkms

TDD infected
Команда форума
Ярослав
readfile не читает весь файл в память.
 

Ярослав

Новичок
zerkms
Каюсь, недосмотрел.
Но это не решает мою проблему.
К примеру я выдам 1 мегабайт динамики через readfile. Как потом остальной контент вывести через nginx?
 

tz-lom

Продвинутый новичок
Ярослав
никак,отдай 1 МБ динамики через echo и 100500 МБ статики через readfile
 

DYPA

Настоящая dypa (c)
PHP:
$rFile = @fopen($sStoreName, 'r');
$rOutput = fopen('php://output', 'w');
if($rFile)
{
	header('Content-Disposition: attachment; filename='.$sName);
    stream_copy_to_stream($rFile, $rOutput);
	exit();
}
те просисходит копирование файла напрямую, при этом не кушается память совсем, докачку можно тоже реализовать через fseek
 

fixxxer

К.О.
Партнер клуба
Сам файл очень интерестный. Он как бы складываеться из двух частей.
Первая часть динамическая. Например нужно изменить определенный токен в файле.
Вторая часть - статика. Тоисть после отдачи первой части можна было бы пустить в бой nginx.
Только вот проблема - незнаю как связать все это в кучу.
Читал что можно контроллировать доступ с помощю апача и потом редиректить на нгинкс через X-Accel-Redirect. Но я не могу выдать динамику до того момента как пошлю X-Accel-Redirect.
Какие решения сучествуют?
1) http://sysoev.ru/nginx/docs/http/ngx_http_addition_module.html
2) встроенный perl http://sysoev.ru/nginx/docs/http/ngx_http_perl_module.html
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
X-Accel-Redirect тут не к месту - если перед выдачей статики будут идти данные, заголовок не отправить
 
Сверху