Отправка клиену большого файла
Обычно есть проблема отправить файл большого размера на сервер. У меня проблема на оборот, нужно с сервера клиенту отправить фай "большого" размера.
Суть в том-что нету прямой ссылки на файл, пользователю выдается временная ссылка, по которой он может скачать файл. Ссылки связаны с файлами через БД.
При использовании функци:
Код:
readfile($filename);
При использовании цикла, выдается 500ошибка Internal Server Error.
Код:
$fp = fopen ( $filename, 'rb' );
while ( ! feof ( $fp ) ) {
echo fread ( $fp, 8192 );
}
while ( ! feof ( $fp ) ) {
echo fread ( $fp, 8192 );
}
Цитата: Poltos
Задача проекта такая, файлы не должны быть в открытом доступе. Скачивание платное, пользователь оплатил, ему пришла временная ссылка. Сделано так что бы кто-то просто не передал ссылку другому пользователю.
а это разве не на коденет обсуждалось уже по поводу отдавать файл скриптом или давать ссылку? если нет - напомню еще возможное решение - формировать и отдавать пользователю символическую ссылку на файл - что куда гуманнее :)
200Мб через скрипт отдавать - глупость. Есть путь к файлу, вот и выдайте его клиенту, пусть файл отдаёт вебсервер.
Цитата: George
200Мб через скрипт отдавать - глупость. Есть путь к файлу, вот и выдайте его клиенту, пусть файл отдаёт вебсервер.
Задача проекта такая, файлы не должны быть в открытом доступе. Скачивание платное, пользователь оплатил, ему пришла временная ссылка. Сделано так что бы кто-то просто не передал ссылку другому пользователю.
Код:
$fp = fopen ( $filename, 'r' );
if ($fp) {
while (!feof($fp)) {
echo fread ($fp,65546);
flush();
}
fclose($fp);
}
if ($fp) {
while (!feof($fp)) {
echo fread ($fp,65546);
flush();
}
fclose($fp);
}