Lyubovnick3 1 Опубликовано: 7 мая 2007 Рассказать Опубликовано: 7 мая 2007 Впрочем ошибка была замечена уже довольно давно, но сейчас просто уже решил сообщить. То, что DLE не подерживает докачку - это ясно. Но файл не скачивается до конца если он размером примерно 700 Мб. Баг замечен на ВСЕХ версиях DLE (от 4.7 до 5.7) и на разных сайтах, разных хостингах и т.д. Большие файлы через антиличь в DLE скачивать нельзя. Даже если файл 300 Мб, уже начинаются проблемы. Не надо говорить, что это не так. Может у вас и T1 интернет соединение, а у нас DSL (он у большего кол-ва числа во всём мире). И скорость начинается от 290 Кб/с и примерно на 50% уже 1 Кб/с На Т3 пробовал - начинается с 3978 Кб/с, скачивает но заканчивается загрузка на скорости 600 Кб/с. Я не один обладатель проблемы. Баг замечем и на лицензионных копиях DLE. Это сообщение о том, что найден баг, а не крик о помощи! Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 072 Опубликовано: 7 мая 2007 Рассказать Опубликовано: 7 мая 2007 Но файл не скачивается до конца если он размером примерно 700 Мб. дело не в размере, дело во времени выполнения скрипта PHP, скачивание идет через скрипт, соответственно когда закончится разрешенное время на его выполнение, его работа будет завершена. Поэтому скачивание больших файлов средствами скрипта не рекомендуется, это очень большая нагрузка не сервер. Каждое скачивание это отдельный PHP процесс. Решить вопрос можно тем что установить неограниченное время на выполнение скрипта, но это плохо в плане нагрузки на сервер. Цитата Ссылка на сообщение Поделиться на других сайтах
Lyubovnick3 1 Опубликовано: 7 мая 2007 Рассказать Опубликовано: 7 мая 2007 Автор Лично себе я сделал так: 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'])); } Это не исправление, в неких своих целях сделал Ну а за совет спасибо - будем пробовать, другого варианта нету. По 1000 человек в один поток каждый качать будут... Мда.. с сервером проблемка Цитата Ссылка на сообщение Поделиться на других сайтах
Lyubovnick3 1 Опубликовано: 8 мая 2007 Рассказать Опубликовано: 8 мая 2007 Автор Решить вопрос можно тем что установить неограниченное время на выполнение скрипта, но это плохо в плане нагрузки на сервер. Секунду, а как же set_time_limit(0); Он ведь убивает этот лимит? Можно сделать если у клиента мозилла или опера ignore_user_abort(); тогда скачивать можно будет даже если закрыть вкладку и завершить этим выполнение РНР. Ну так позволь поинтересоваться, зачем set_time_limit(0); ? В php.ini всё равно стоит 30 И если эта функция меняет время выполнения, то что-то мне не ясно. Всё больше людей начинают на DLE делать антиличь. Купен выделенный сервер, если я заменю max_execution_time = 30 на 0 - поможет? Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 072 Опубликовано: 9 мая 2007 Рассказать Опубликовано: 9 мая 2007 Секунду, а как же set_time_limit(0); Он ведь убивает этот лимит? если в настройках PHP разрешено это убивание, на 99% обычных хостингах менять это значение нельзя, хотя скрипт пытается, для этого и стоит @ перед функцией чтобы небыло посылов подальше от сервера. Купен выделенный сервер, если я заменю max_execution_time = 30 на 0 - поможет? попробуйте, должно помочь, я никогда не качал по 700 МБ, но это еще раз говорю плохо, можно сервер легко положить. Представляете качает 100 человек и каждый качает часов пять, опять таки докачка не поддерживается, пользователи будут не рабы если прервется на 90%. скачивание в DLE не разрабатывалось для крупных файлов, поэтому использование скрипта неудачное решение, хотя конечно скрипт на 100% защищает от воровства ссылок. Цитата Ссылка на сообщение Поделиться на других сайтах
Zdraff 4 Опубликовано: 14 мая 2007 Рассказать Опубликовано: 14 мая 2007 И, все-таки, есть ли какие-нибудь пути снижения нагрузки на сервер из-за скачки пользователями больших файлов? У меня в каждой новости есть файл до 100мб весом и посещаемость 5000 уников. Нагрузка уже неслабая получается, а сайт разрастается. Цитата Ссылка на сообщение Поделиться на других сайтах
Lyubovnick3 1 Опубликовано: 14 мая 2007 Рассказать Опубликовано: 14 мая 2007 Автор А ты представь что происходит, когда 90 000 человек качают. Вот так туго с этим. Кстати, ini_set('max_execution_time', 0); тоже неплохо Цитата Ссылка на сообщение Поделиться на других сайтах
Zdraff 4 Опубликовано: 14 мая 2007 Рассказать Опубликовано: 14 мая 2007 Вот надо что-то делать с этим. Знал бы ПХП, - разобрался бы. А так вот помощи просить вынужден. Не тут, так у кого-нить да за хлеб с солью. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.