Перейти к публикации

Прерывается скачивание


Рекомендованные сообщения

Впрочем ошибка была замечена уже довольно давно, но сейчас просто уже решил сообщить.

То, что DLE не подерживает докачку - это ясно.

Но файл не скачивается до конца если он размером примерно 700 Мб.

Баг замечен на ВСЕХ версиях DLE (от 4.7 до 5.7) и на разных сайтах, разных хостингах и т.д.

Большие файлы через антиличь в DLE скачивать нельзя.

Даже если файл 300 Мб, уже начинаются проблемы.

Не надо говорить, что это не так.

Может у вас и T1 интернет соединение, а у нас DSL (он у большего кол-ва числа во всём мире).

И скорость начинается от 290 Кб/с и примерно на 50% уже 1 Кб/с

На Т3 пробовал - начинается с 3978 Кб/с, скачивает но заканчивается загрузка на скорости 600 Кб/с.

Я не один обладатель проблемы.

Баг замечем и на лицензионных копиях DLE.

Это сообщение о том, что найден баг, а не крик о помощи!

Ссылка на сообщение
Поделиться на других сайтах

Но файл не скачивается до конца если он размером примерно 700 Мб.

дело не в размере, дело во времени выполнения скрипта PHP, скачивание идет через скрипт, соответственно когда закончится разрешенное время на его выполнение, его работа будет завершена. Поэтому скачивание больших файлов средствами скрипта не рекомендуется, это очень большая нагрузка не сервер. Каждое скачивание это отдельный PHP процесс. Решить вопрос можно тем что установить неограниченное время на выполнение скрипта, но это плохо в плане нагрузки на сервер.

Ссылка на сообщение
Поделиться на других сайтах

Лично себе я сделал так:

	header("Pragma: public");

	header("Expires: 0");

	header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

	header("Cache-Control: private",false);

	header("Content-Type: application/octet-stream");

	header("Content-Disposition: attachment; filename={$row['name']}");

	header("Content-Transfer-Encoding: binary");

	header("Content-Length: ".@filesize(FILE_DIR.$row['onserver']));
Заменил на:
	$mime_type = (strstr($_SERVER['HTTP_USER_AGENT'],'IE') or strstr($HTTP_USER_AGENT,'OPERA'))

	? 'application/octetstream'

	: 'application/octet-stream';

	header('Content-Type: ' . $mime_type);

	header('Expires: 0');


	if (strstr($_SERVER['HTTP_USER_AGENT'],'IE')) {

	header('Content-Disposition: attachment; filename="'.$row['name'].'"');

	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');

	header('Pragma: public');

	} else {

	header('Content-Disposition: attachment; filename="'.$row['name'].'"');

	header('Pragma: no-cache');

	header("Content-Length: ".@filesize(FILE_DIR.$row['onserver']));

	}

Это не исправление, в неких своих целях сделал B)

Ну а за совет спасибо - будем пробовать, другого варианта нету.

По 1000 человек в один поток каждый качать будут...

Мда.. с сервером проблемка

Ссылка на сообщение
Поделиться на других сайтах

Решить вопрос можно тем что установить неограниченное время на выполнение скрипта, но это плохо в плане нагрузки на сервер.

Секунду, а как же set_time_limit(0);

Он ведь убивает этот лимит?

Можно сделать если у клиента мозилла или опера ignore_user_abort(); тогда скачивать можно будет даже если закрыть вкладку и завершить этим выполнение РНР.

Ну так позволь поинтересоваться, зачем set_time_limit(0); ?

В php.ini всё равно стоит 30

И если эта функция меняет время выполнения, то что-то мне не ясно.

Всё больше людей начинают на DLE делать антиличь.

Купен выделенный сервер, если я заменю max_execution_time = 30 на 0 - поможет? :unsure:

Ссылка на сообщение
Поделиться на других сайтах

Секунду, а как же set_time_limit(0);

Он ведь убивает этот лимит?

если в настройках PHP разрешено это убивание, на 99% обычных хостингах менять это значение нельзя, хотя скрипт пытается, для этого и стоит @ перед функцией чтобы небыло посылов подальше от сервера.

Купен выделенный сервер, если я заменю max_execution_time = 30 на 0 - поможет?

попробуйте, должно помочь, я никогда не качал по 700 МБ, но это еще раз говорю плохо, можно сервер легко положить. Представляете качает 100 человек и каждый качает часов пять, опять таки докачка не поддерживается, пользователи будут не рабы если прервется на 90%. скачивание в DLE не разрабатывалось для крупных файлов, поэтому использование скрипта неудачное решение, хотя конечно скрипт на 100% защищает от воровства ссылок.

Ссылка на сообщение
Поделиться на других сайтах

И, все-таки, есть ли какие-нибудь пути снижения нагрузки на сервер из-за скачки пользователями больших файлов? У меня в каждой новости есть файл до 100мб весом и посещаемость 5000 уников. Нагрузка уже неслабая получается, а сайт разрастается.

Ссылка на сообщение
Поделиться на других сайтах

А ты представь что происходит, когда 90 000 человек качают.

Вот так туго с этим.

Кстати, ini_set('max_execution_time', 0); тоже неплохо :rolleyes:

Ссылка на сообщение
Поделиться на других сайтах

Вот надо что-то делать с этим. Знал бы ПХП, - разобрался бы. А так вот помощи просить вынужден. Не тут, так у кого-нить да за хлеб с солью.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...