Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Отправка клиену большого файла

434
04 апреля 2012 года
Poltos
105 / / 18.08.2004
Доброго времени суток!

Обычно есть проблема отправить файл большого размера на сервер. У меня проблема на оборот, нужно с сервера клиенту отправить фай "большого" размера.

Суть в том-что нету прямой ссылки на файл, пользователю выдается временная ссылка, по которой он может скачать файл. Ссылки связаны с файлами через БД.

При использовании функци:
 
Код:
readfile($filename);
Выдается ошибка ограничения памяти выделенной под php скрип.

При использовании цикла, выдается 500ошибка Internal Server Error.
 
Код:
$fp = fopen ( $filename, 'rb' );
while ( ! feof ( $fp ) ) {
    echo fread ( $fp, 8192 );
}
Подскажите, как можно отправить файл размер которого больше чем память выделенная под скрипт? По сути файлы не такого уж большого размера, около 200Мб.
1
05 апреля 2012 года
kot_
7.3K / / 20.01.2000
Цитата: Poltos


Задача проекта такая, файлы не должны быть в открытом доступе. Скачивание платное, пользователь оплатил, ему пришла временная ссылка. Сделано так что бы кто-то просто не передал ссылку другому пользователю.


а это разве не на коденет обсуждалось уже по поводу отдавать файл скриптом или давать ссылку? если нет - напомню еще возможное решение - формировать и отдавать пользователю символическую ссылку на файл - что куда гуманнее :)

6
05 апреля 2012 года
George
4.1K / / 05.01.2007
200Мб через скрипт отдавать - глупость. Есть путь к файлу, вот и выдайте его клиенту, пусть файл отдаёт вебсервер.
434
05 апреля 2012 года
Poltos
105 / / 18.08.2004
Цитата: George
200Мб через скрипт отдавать - глупость. Есть путь к файлу, вот и выдайте его клиенту, пусть файл отдаёт вебсервер.



Задача проекта такая, файлы не должны быть в открытом доступе. Скачивание платное, пользователь оплатил, ему пришла временная ссылка. Сделано так что бы кто-то просто не передал ссылку другому пользователю.

4
05 апреля 2012 года
mike
3.7K / / 01.10.2002
Нужно смотреть почему выдается 500 ошибка. В логах наверняка что-то есть. С таким кодом можно отдавать файл любого размера. Главное - не читать его в память. Примерно так:


 
Код:
$fp = fopen ( $filename, 'r' );
if ($fp) {
    while (!feof($fp)) {
        echo fread ($fp,65546);
        flush();
        }
    fclose($fp);
    }
Если продолжает не работать, то берем файлы меньшего размера и при чтении смотрим результат функции memory_get_usage()
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог