Обслуживание файлов в Zend Framework MVC - PullRequest
1 голос
/ 07 августа 2009

Какова лучшая практика при обслуживании файлов из Zend Framework MVC? Эти файлы должны быть предоставлены из MVC, поскольку они защищены.

Я знаю, что вы можете прочитать файл и поместить его в объект Response, но это кажется плохой практикой, поскольку вы читаете весь файл в память и затем обслуживаете его. Прямо сейчас я обычно делаю:

header('Content-type: image/jpeg');
fpassthru(fopen($path, 'rb'));
exit;

Но это также кажется неправильным, так как я прекращаю выполнение сценария. Есть предложения?

Ответы [ 3 ]

1 голос
/ 07 августа 2009

Я бы предложил создать супер-простой скрипт для извлечения файлов на основе системы тикетов, как в CMS, вы генерируете тикет в БД - имя файла, уникальный хэш и затем перенаправляете в супер-простой скрипт восстановления файла (file.php? хэш = asd52ad3as1g5). Он получит хеш из запроса и на его основе извлечет реальное имя файла и отправит его на вывод, как вы написали, используя fpassthru. Хеш должен быть уникальным и трудно угадать ...

1 голос
/ 07 августа 2009

Я не вижу ничего плохого, просто выход (); Вы должны быть осторожны с любыми слоями буферизации вывода, которые у вас могут быть (сжатие gzip и т. Д.). Большие файлы могут взорвать эти буферы довольно быстро, так что вы захотите закрыть их и потенциально «разделить» на части с помощью цикла fopen / fread.

1 голос
/ 07 августа 2009

Вы можете попробовать использовать заголовок X-Sendfile. Это поддерживается lighttpd и более новыми версиями apache. По сути, веб-сервер заменит вывод сценария указанным вами файлом. Недостатком является то, что он зависит от конфигурации веб-сервера, поэтому вы можете использовать хост, который его не поддерживает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...