Файл не качается полностью посредствам пхп

Статус
В этой теме нельзя размещать новые ответы.

SOCRAT

Гуру форума
Регистрация
6 Июн 2006
Сообщения
263
Реакции
55
Ставил много разных антиличей, просто скриптов файлообменников никто не хочет отдавать файл полностью (скачивается 50-150 мб из 250-400), я так понимаю проблема скорее даже не в пхп (ибо все скрипты тестились на локалхосте и скачалось все полностью), а в настройках сервера. Если файл качать по прямой ссылке, то скачивается полностью.
В чем может быть проблема и как ее можно исправить? (используется американский хостинг). Менять хостера не предлагать :).
 
Не буду предлагать менять хостера, но:

По описанным тобой симптомам проблема скорее всего в том, что у тебя время работы скрипта превышает 300 секунд - и скрипт автоматически пришибается. Что он успел за это время выплюнуть в браузер - то и скачалось.

Лечится это с помощью set_time_limit(0) в начале скрипта, но далеко не каждый хостер позволяет менять это значение. Так что даже не знаю, что тебе предложить, см. начало поста.. :)

Конечно проще найти другого хостера, но раз в данном случае это не вариант - попробуй уболтать своего, чтоб сделал соотв. изменения в php.ini
 
Как самый-самый последний вариант можно делать так - после отработки всех счтечиков (количество скачек считается, да?) вместо отдачи файла скриптом вставляем такую команду:

header("Location: /путь-к-файлу/файл.rar");

Идея понятна? ;)
 
В самом начале уже стоит:
Код:
if (function_exists('set_time_limit') AND get_cfg_var('safe_mode') == 0)
{
    @set_time_limit(0);
}
Может можно что-то прописать в хтаксесс?
 
Так вот именно, что наверняка у любого скрипта антиличера эта функция уже и так вызывается, поэтому раз она не приводит к нужному эффекту (а на домашней машине - приводит) - то дело именно в хостере, который запретил установку кастомного set_time_limit.

ЗАпрещается она в php.ini, и своим хтакксесом ты вряд ли ее перебьешь. НО на всякий случай - в .htaccess надо указать
Код:
php_value max_execution_time 0
и еще почитай хелп на php.net/set_time_limit - там может другие способы есть.

И в любом случае, если хостер запретил выставлять тайм лимит именно из скрипта, то он наверняка запретил и в хтаксесе тоже, так что вывод один - не буду его озвучивать :)
 
Скорее всего проблема с хостером

Скорее всего проблема с хостером
 
2Simpson, идея, к сожалению, не понятна.

2venetu, Спасибо, посмотрел значения max_execution_time в пхп инфо: Local Value - 0, Master Value - 40, это как-то поможет? Заметил что файл может качаться и 20 минут, но дальше обрывается =( Т.е. дело не в 30/40 секундах (5 минутах, ты вроде написал о 300 секундах..). Добавил в хтаксесс php_value max_execution_time 0 не помогло =\
Сейчас попробую в саппорт написать.
 
Подумай, может твоя задача решается средствами .htaccess? Сложи все свои файлы в секретную папочку, запрети к ней доступ, а потом разрешай избранным - по рефереру, по установленной куке, по хитрой ссылочке с lifetime (последний вариант самый надежный, но требует перезаписывания .htaccess каждый раз).

Это, конечно, не панацея, но по крайней мере ты сможешь выдавать скриптом на свои файлы ссылки вида
/download/7624393184324324/my_file.zip
которые будут валидны только для одного ip и только в течение, скажем, 4 часов. Контроля по количеству скачиваний не будет, автоdownloader'ы не отсечешь, но по крайней мере рассмотреть этот вариант стоит..

Если на серваке есть mod_rewrite, и не боишься открыть .htaccess для записи из апача, то очень рекомендую! Это примерно то же, что предлагает Simpson, но с каким-никаким контролем скачиваний.
У Симпсона же один раз получил прямую ссылку (которую header() выдал) - и потом качай по ней кто хочет сколько хочет в обход скрипта..
 
Своеобразный суппорт, просили показать скрипт который не работает, указал, сказали выключить сайф мод, сказал что выключил его через неделю после начала пользования их услугами, ответили: "Дайте нам знать если ошибка повториться", написал что сейв мод выключен и это не решило проблему, вновь спросили, а вы выключили сейф мод?! :D Чую разговор будет долгим..

Но сейчас вроде работает, спасибо, venetu, если вновь повториться ошибка попробую твой метод.
 
Рано обрадовался, сново началось :confused:. Как узнать из-за чего прерывается скачка?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху