Загрузка файлов с сервера

Статус
В этой теме нельзя размещать новые ответы.
I

IchWill

Прохожие
Надо чтобы пользователи могли загружать с сервера файлы с русскими именами. для этого я сделал следующее
Изначала $file получается в виде имени файла без расширения в кодировке utf8. оно вылазиет как название файла при сохранении. утф8 нужно для того чтобы сохранялись не каракули.
$files - имя файла на сервере. К сожалению совместить его с $file не получилось.
PHP:
$file = "$file.mp3";
header('Content-type: application/force-download');
header("Content-Disposition: attachment; filename=$file");
$open = fopen("$files", "rb");
while(!feof($open)) {
$line = fgets($open);
echo "$line";
}
fclose($open);
}
Вся проблема в том что файлы большие(>10mb) а сервер слабенький. Поэтому пользователь должен долго ждать ответа(пока генерится на сервере этот файл) и только потом появляется окошка желаете ли сохранить. Можете посоветовать чтонибуть для того чтобы файл не генерировался на сервере а отдовался сразу же. с именем $file
 
чтобы пользователи не ждали можно так сделать
echo "$line"; ob_flush();
 
можно юзать функцию readfile($file);

т.е. она сразу отдает файл в поток

вообще, если смысл в том, чтобы отдать юзеру файл,
при этом не показывая его урла и не создавая нагрузки на сервер,
то проще создавать на файл симлинк (symlink(); )
и показывать юзерам симлинки
 
Спасибо:)
И еще один вопросик. Как можно зделать чтоб передавался размер файла т.к сейчас все качается в слепую.
Про fileread скрипт начинает по бешеному тупить и загрузка страници идет несколь минут.
Про symlink();
нашол такое вот замечание:
Замечание: Для Windows-платформ эта функция не реализована.
 
Спасибо:)
И еще один вопросик. Как можно зделать чтоб передавался размер файла т.к сейчас все качается в слепую.
Про fileread скрипт начинает по бешеному тупить и загрузка страници идет несколь минут.

если я правильно понял вопрос,
то
header('Content-Length: '.$filesize);

а насчет тупения - таки да

большие файлы нужно симлинками отдавать

на таком принципе делается антилич -
создается временная папка,
имеющая имя вроде
ad87a6923h423o8sdufl, т.е. к примеру,
хеш код (md5(); ) рандомного числа от 100000 до 999999,
туда кидается симлинк на нужный файл

после, предположим, 30 минут, папка удаляется

смысл в том, что тогда не надо напрягать пхп для обработки файла

Про symlink();
нашол такое вот замечание:
Замечание: Для Windows-платформ эта функция не реализована.
имеется ввиду, что сервер на винде

а если сервер на *никсах, что нормально в случае с
юзанием php, то нет проблем
 
Для вындовса есть такой вариант

$filename = './download/data.zip';
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".@filesize($filename));
set_time_limit(0);
@readfile($filename) or die("File not found.");
die();

или для того чтоб не грузить сервак можно попробовать при отгрузке через echo сбрасывать буффер каждые 4-16кб прочитанного файла.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху