Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Скачивание файлов с сервера используя PHP

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3

Открыть новую тему     Написать ответ в эту тему

VIgor

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
есть

Код:
 
$file="file.zip";
$bin_root="folder/";
$size = filesize($bin_root.$file);
header("Content-type: application/zip");
header("Content-Length: $size");
header("Content-Disposition: attachment; filename=$file");
readfile($bin_root.$file);
 

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

Всего записей: 38 | Зарегистр. 20-11-2001 | Отправлено: 13:26 06-12-2002
hamshen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VIgor
1. Ты не полностью сформировал http заголовок. Например header ("HTTP/1.1 200 OK");
2. Для поддержки докачки надо анализировать запрос, а конкретно наличие $_SERVER["HTTP_RANGE"].
3. Не лучше ли вместо header("Content-type: application/zip"); использовать header ("Content-Type: application/octet-stream"); ?


----------
Хорошие умирают молодыми, но плохие умирают уродливо.

Всего записей: 614 | Зарегистр. 22-04-2002 | Отправлено: 16:49 07-12-2002
VIgor

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
header ("HTTP/1.1 200 OK"); добавить после  
$size=filesize($bin_root.$file); ?
 
А можно поконкретнее о $_SERVER["HTTP_RANGE"]. или пример какой-нибудь.

Всего записей: 38 | Зарегистр. 20-11-2001 | Отправлено: 18:20 07-12-2002
hamshen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот норамльный заголовок

Код:
 
header ("HTTP/1.1 200 OK");
header ("Date: " . getGMTDateTime ());
header ("X-Powered-By: PHP/" . phpversion());
header ("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header ("Cache-Control: None");
header ("Pragma: no-cache");
header ("Accept-Ranges: bytes");
header ("Content-Disposition: inline; filename=\"" . $workFileName . "\"");
header ("Content-Type: application/octet-stream");
header ("Content-Length: " . $contentSize);
header ("Age: 0");
header ("Proxy-Connection: close");
 

 
А это если файл докачивается

Код:
 
preg_match ("/bytes=(\d+)-/", $server["HTTP_RANGE"], $m);
$contentSize = $workFileSize - intval($m[1]);
$p1 = $workFileSize-$contentSize;
$p2 = $workFileSize-1;
$p3 = $workFileSize;
 
header ("HTTP/1.1 206 Partial Content");
header ("Date: " . getGMTDateTime ());
header ("X-Powered-By: PHP/" . phpversion());
header ("Expires: Thu, 19 Nov 1981 08:52:00 GMT");
header ("Cache-Control: None");
header ("Pragma: no-cache");
header ("Accept-Ranges: bytes");
header ("Content-Disposition: inline; filename=\"" . $workFileName . "\"");
header ("Content-Type: application/octet-stream");
header ("Content-Range: bytes " . $p1 . "-" . $p2 . "/" . $p3);
header ("Content-Length: " . $contentSize);
header ("Proxy-Connection: close");
 

 

Цитата:
А можно поконкретнее о $_SERVER["HTTP_RANGE"]. или пример какой-нибудь


Код:
 
if (isset($server["HTTP_RANGE"]))
 


----------
Хорошие умирают молодыми, но плохие умирают уродливо.

Всего записей: 614 | Зарегистр. 22-04-2002 | Отправлено: 19:13 07-12-2002
VIgor

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Большое спасибо!

Всего записей: 38 | Зарегистр. 20-11-2001 | Отправлено: 08:57 09-12-2002
roma572



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А как заставить ПХП читать файл именно с заданным оффсетом?

Всего записей: 409 | Зарегистр. 30-03-2002 | Отправлено: 10:18 09-12-2002
hamshen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
roma572

Цитата:
А как заставить ПХП читать файл именно с заданным оффсетом?


Код:
 
$fd = fopen ($file, "r");
fseek ($fd, $offset);
$contents = fread ($fd, filesize($file)-$offset);
 



----------
Хорошие умирают молодыми, но плохие умирают уродливо.

Всего записей: 614 | Зарегистр. 22-04-2002 | Отправлено: 10:23 09-12-2002
roma572



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот что значит мануалы не читал
Ещё вопрос по теме. Как ограничить число потоков одним?

Всего записей: 409 | Зарегистр. 30-03-2002 | Отправлено: 10:32 09-12-2002
hamshen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
roma572

Цитата:
Ещё вопрос по теме. Как ограничить число потоков одним?

Можно по ip или по сессии, но это хуже: IE, Mozilla, Opera - 3 сессии, и т.д.

----------
Хорошие умирают молодыми, но плохие умирают уродливо.

Всего записей: 614 | Зарегистр. 22-04-2002 | Отправлено: 10:43 09-12-2002 | Исправлено: hamshen, 10:44 09-12-2002
roma572



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
По айпи тоже не хорошо. Есть прокси, не выставляющие HTTP_X_FORWARDED_FOR, тогда получится что на всех юзеров за этим прокси будет один поток.

Всего записей: 409 | Зарегистр. 30-03-2002 | Отправлено: 10:46 09-12-2002
hamshen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
roma572
Это проблема юзеров сидящих за прокси.
Можно конечно самому генерировать уникальный хеш и идентифицировать по нему.

----------
Хорошие умирают молодыми, но плохие умирают уродливо.

Всего записей: 614 | Зарегистр. 22-04-2002 | Отправлено: 11:15 09-12-2002
roma572



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Понятно. Каким образом можно дать понять ПХП, что при загрузке файла в осле юзер нажал кнопку Отмена?

Всего записей: 409 | Зарегистр. 30-03-2002 | Отправлено: 12:18 09-12-2002
hamshen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
roma572

Цитата:
Каким образом можно дать понять ПХП, что при загрузке файла в осле юзер нажал кнопку Отмена?

А каким образом ты даешь понять PHP, что юзер в браузере нажал Стоп (Отмена)? Точно так же.


----------
Хорошие умирают молодыми, но плохие умирают уродливо.

Всего записей: 614 | Зарегистр. 22-04-2002 | Отправлено: 12:50 09-12-2002
roma572



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Думаю, что не так же. Во всяком случае, register_shutdown_function не помогает.

Всего записей: 409 | Зарегистр. 30-03-2002 | Отправлено: 14:38 09-12-2002
hamshen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
roma572

Цитата:
Думаю, что не так же.

Почему? Та же самя ситуация.

Цитата:
Во всяком случае, register_shutdown_function не помогает.

А при чем тут register_shutdown_function? Ф-ция сработает лишь после завершения скрипта. А в данном случае он не завершился, максимум - прибился по таймауту.


----------
Хорошие умирают молодыми, но плохие умирают уродливо.

Всего записей: 614 | Зарегистр. 22-04-2002 | Отправлено: 15:31 09-12-2002
roma572



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
hamshen
Я примерно понимаю, о чём речь. Не мог бы ты привести в пример кусок кода?

Всего записей: 409 | Зарегистр. 30-03-2002 | Отправлено: 15:43 09-12-2002 | Исправлено: roma572, 15:43 09-12-2002
hamshen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
roma572

Цитата:
Не мог бы ты привести в пример кусок кода?

Кусок кода для чего?

----------
Хорошие умирают молодыми, но плохие умирают уродливо.

Всего записей: 614 | Зарегистр. 22-04-2002 | Отправлено: 16:10 09-12-2002
VIgor

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А можно ли узнать размер файла на другом сервере
например www.host1.net/script.php показывает размер файла на сайте www.host2.net/files/info.dat
 
filesize(); в этом случае не работает.

Всего записей: 38 | Зарегистр. 20-11-2001 | Отправлено: 16:30 09-12-2002
roma572



Full Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
hamshen
Кусок кода для работы с тайм-аутом.

Всего записей: 409 | Зарегистр. 30-03-2002 | Отправлено: 17:08 09-12-2002
hamshen

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VIgor

Цитата:
А можно ли узнать размер файла на другом сервере  

Скорее всего нормальным способом этого нельзя сделать.
 
roma572

Цитата:
Кусок кода для работы с тайм-аутом.

А разве это возможно? Это же не java.
Объясни, что тебе надо сделать?

----------
Хорошие умирают молодыми, но плохие умирают уродливо.

Всего записей: 614 | Зарегистр. 22-04-2002 | Отправлено: 17:23 09-12-2002 | Исправлено: hamshen, 17:33 09-12-2002
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3

Компьютерный форум Ru.Board » Интернет » Web-программирование » Скачивание файлов с сервера используя PHP


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

LiteCoin: LgY72v35StJhV2xbt8CpxbQ9gFY6jwZ67r

Рейтинг.ru