#php #database #download #blob
#php #База данных #Скачать #большой двоичный объект
Вопрос:
У меня есть php-код для загрузки файла для конкретного пользователя, я сохраняю содержимое файла в базе данных (используя тип blob).
<?php
//do stuffs to validate user
//do stuffs get the content from database;
//$r=mysql_fetch_object("$query");
header("Content-Type: $r->type");
header("Content-Disposition: attachment; filename="$r->name"");
echo $r->content;
?>
В случае больших файлов загрузка файла занимает много времени.
Как улучшить код?
Увеличивается ли скорость загрузки при нескольких подключениях?
Комментарии:
1. Подробные сведения. Дайте им, если вам нужна помощь. Какие скорости вы видите? Насколько велик big? Через какое соединение? и т. д
2. Не могу прокомментировать его ускорение, но указание
Content-Length
заголовка позволит получающему пользователю получить строку состояния и расчетное время прибытия (может показаться быстрее).
Ответ №1:
Предполагая, что на соединение не наложены искусственные ограничения, передача HTTP займет столько сетевого канала, сколько сможет.
Как только соединение начинает регулироваться (например, на сайте загрузки файлов, таком как Rapidshare, «бесплатные» пользователи получают ограниченную пропускную способность), использование параллельных подключений МОЖЕТ увеличить скорость. например, один поток ограничен 50 кбит / с, поэтому открытие 2 потоков обеспечит эффективную скорость 100 кбит / с.
Но тогда вам придется поддерживать ранжированную загрузку. Ваш скрипт в его нынешнем виде отправляет весь файл, от начала до конца. Таким образом, пользователь загрузит весь файл дважды.
Ответ №2:
Вероятно, вы не так уж много можете сделать, чтобы ускорить этот конкретный процесс.
Пропускная способность сервера и клиента жестко ограничена. Потоковая передача файла через PHP вызовет некоторые дополнительные накладные расходы, но, поскольку данные поступают из базы данных, простого способа улучшить это тоже нет.
Переход на более быстрый сервер с большей пропускной способностью может помочь, но может и не помочь. Если клиентское соединение медленное, вы ничего не можете сделать.