Я использую этот скрипт для загрузки файлов в php.
Вот исходный источник, где я скопировал скрипт. < /p>
if(file_exists($path)){
$file_size = filesize($path);
$file = fopen($path,"rb");
$chunksize = 2*1024*1024; // how many bytes per chunk
if($file){
header("Content-Description: File Transfer");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: public, must-revalidate, post-check=0, pre-check=0");
header("Content-Disposition: attachment; filename=\"$name.$format\"");
header("Content-Type: $mimetype");
//check if http_range is sent by browser (or download manager)
if(isset($_SERVER['HTTP_RANGE'])){
list($size_unit, $range_orig) = explode('=', $_SERVER['HTTP_RANGE'], 2);
if ($size_unit == 'bytes'){
//multiple ranges could be specified at the same time, but for simplicity only serve the first range
//http://tools.ietf.org/id/draft-ietf-htt ... val-00.txt
list($range, $extra_ranges) = explode(',', $range_orig, 2);
}
else{
$range = '';
header('HTTP/1.1 416 Requested Range Not Satisfiable');
exit;
}
}
else{
$range = '';
}
//figure out download piece from range (if set)
list($seek_start, $seek_end) = explode('-', $range, 2);
//set start and end based on range (if set), else set defaults
//also check for invalid ranges.
$seek_end = (empty($seek_end)) ? ($file_size - 1) : min(abs(intval($seek_end)),($file_size - 1));
$seek_start = (empty($seek_start) || $seek_end < abs(intval($seek_start))) ? 0 : max(abs(intval($seek_start)),0);
//Only send partial content header if downloading a piece of the file (IE workaround)
if ($seek_start > 0 || $seek_end < ($file_size - 1)){
header('HTTP/1.1 206 Partial Content');
header('Content-Range: bytes '.$seek_start.'-'.$seek_end.'/'.$file_size);
header('Content-Length: '.($seek_end - $seek_start + 1));
}
else
header("Content-Length: $file_size");
header('Accept-Ranges: bytes');
set_time_limit(0);
@fseek($file, $seek_start);
while(!feof($file)){
print(@fread($file, $chunksize));
ob_flush();
flush();
if (connection_status()!=0){
@fclose($file);
exit;
}
}
@fclose($file);
exit;
}
else{
// file couldn't be opened
header("HTTP/1.0 500 Internal Server Error");
exit;
}
}
else {
// file does not exist
header("HTTP/1.0 404 Not Found");
exit;
}
< /code>
Теперь проблема.
Загрузка больших файлов, (e, g> 20mb) иногда загружается успешно. И иногда это ломается в середине загрузки. Например, я проверил и обнаружил, что для файла 100 МБ после загрузки 40 МБ он не удался. (Не один раз, несколько раз.)
В браузере кажется, что файл загружается полностью. (Firefox и Chrome не имели неудачного текста в панели загрузки. Но существует опция «Open Sogning Polder»)
Некоторые из моих друзей с очень медленным подключением к Интернету говорят, что та же проблема произошла с ним для небольших файлов (менее 1 МБ). Но я никогда не испытывал этого. (Может быть, потому что мой интернет не медленный)
, поэтому проблема в том, что когда кто -то с медленным соединением хочет скачать, в середине он ломается для него. (Я думаю, сервер больше не отправляет ему файл.)
Note1: У меня тоже есть эти два заголовка: < /p>
Connection: Keep-Alive
Keep-Alive: timeout=5
Подробнее здесь: https://stackoverflow.com/questions/315 ... f-download
PHP скачать не сбои в середине загрузки ⇐ Php
Кемеровские программисты php общаются здесь
1751325195
Anonymous
Я использую этот скрипт для загрузки файлов в php.
Вот исходный источник, где я скопировал скрипт. < /p>
if(file_exists($path)){
$file_size = filesize($path);
$file = fopen($path,"rb");
$chunksize = 2*1024*1024; // how many bytes per chunk
if($file){
header("Content-Description: File Transfer");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: public, must-revalidate, post-check=0, pre-check=0");
header("Content-Disposition: attachment; filename=\"$name.$format\"");
header("Content-Type: $mimetype");
//check if http_range is sent by browser (or download manager)
if(isset($_SERVER['HTTP_RANGE'])){
list($size_unit, $range_orig) = explode('=', $_SERVER['HTTP_RANGE'], 2);
if ($size_unit == 'bytes'){
//multiple ranges could be specified at the same time, but for simplicity only serve the first range
//http://tools.ietf.org/id/draft-ietf-http-range-retrieval-00.txt
list($range, $extra_ranges) = explode(',', $range_orig, 2);
}
else{
$range = '';
header('HTTP/1.1 416 Requested Range Not Satisfiable');
exit;
}
}
else{
$range = '';
}
//figure out download piece from range (if set)
list($seek_start, $seek_end) = explode('-', $range, 2);
//set start and end based on range (if set), else set defaults
//also check for invalid ranges.
$seek_end = (empty($seek_end)) ? ($file_size - 1) : min(abs(intval($seek_end)),($file_size - 1));
$seek_start = (empty($seek_start) || $seek_end < abs(intval($seek_start))) ? 0 : max(abs(intval($seek_start)),0);
//Only send partial content header if downloading a piece of the file (IE workaround)
if ($seek_start > 0 || $seek_end < ($file_size - 1)){
header('HTTP/1.1 206 Partial Content');
header('Content-Range: bytes '.$seek_start.'-'.$seek_end.'/'.$file_size);
header('Content-Length: '.($seek_end - $seek_start + 1));
}
else
header("Content-Length: $file_size");
header('Accept-Ranges: bytes');
set_time_limit(0);
@fseek($file, $seek_start);
while(!feof($file)){
print(@fread($file, $chunksize));
ob_flush();
flush();
if (connection_status()!=0){
@fclose($file);
exit;
}
}
@fclose($file);
exit;
}
else{
// file couldn't be opened
header("HTTP/1.0 500 Internal Server Error");
exit;
}
}
else {
// file does not exist
header("HTTP/1.0 404 Not Found");
exit;
}
< /code>
Теперь проблема.
Загрузка больших файлов, (e, g> 20mb) иногда загружается успешно. И иногда это ломается в середине загрузки. Например, я проверил и обнаружил, что для файла 100 МБ после загрузки 40 МБ он не удался. (Не один раз, несколько раз.)
В браузере кажется, что файл загружается полностью. (Firefox и Chrome не имели неудачного текста в панели загрузки. Но существует опция «Open Sogning Polder»)
Некоторые из моих друзей с очень медленным подключением к Интернету говорят, что та же проблема произошла с ним для небольших файлов (менее 1 МБ). Но я никогда не испытывал этого. (Может быть, потому что мой интернет не медленный)
, поэтому проблема в том, что когда кто -то с медленным соединением хочет скачать, в середине он ломается для него. (Я думаю, сервер больше не отправляет ему файл.)
Note1: У меня тоже есть эти два заголовка: < /p>
Connection: Keep-Alive
Keep-Alive: timeout=5
Подробнее здесь: [url]https://stackoverflow.com/questions/31557151/php-download-fails-at-the-middle-of-download[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия