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

Тема в разделе "Администрирование серверов", создана пользователем SOCRAT, 12 июн 2008.

Статус темы:
Закрыта.
Модераторы: mefish, stooper
  1. SOCRAT

    SOCRAT

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

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Не буду предлагать менять хостера, но:

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

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

    Конечно проще найти другого хостера, но раз в данном случае это не вариант - попробуй уболтать своего, чтоб сделал соотв. изменения в php.ini
     
  3. Simpson

    Simpson

    Регистр.:
    22 июл 2007
    Сообщения:
    373
    Симпатии:
    36
    Как самый-самый последний вариант можно делать так - после отработки всех счтечиков (количество скачек считается, да?) вместо отдачи файла скриптом вставляем такую команду:

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

    Идея понятна? ;)
     
  4. SOCRAT

    SOCRAT

    Регистр.:
    6 июн 2006
    Сообщения:
    275
    Симпатии:
    54
    В самом начале уже стоит:
    Код:
    if (function_exists('set_time_limit') AND get_cfg_var('safe_mode') == 0)
    {
        @set_time_limit(0);
    }
    Может можно что-то прописать в хтаксесс?
     
  5. venetu

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Так вот именно, что наверняка у любого скрипта антиличера эта функция уже и так вызывается, поэтому раз она не приводит к нужному эффекту (а на домашней машине - приводит) - то дело именно в хостере, который запретил установку кастомного set_time_limit.

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

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

    snbp Создатель

    Регистр.:
    2 июн 2007
    Сообщения:
    12
    Симпатии:
    0
    Скорее всего проблема с хостером

    Скорее всего проблема с хостером
     
  7. SOCRAT

    SOCRAT

    Регистр.:
    6 июн 2006
    Сообщения:
    275
    Симпатии:
    54
    2Simpson, идея, к сожалению, не понятна.

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

    venetu

    Регистр.:
    28 мар 2007
    Сообщения:
    735
    Симпатии:
    261
    Подумай, может твоя задача решается средствами .htaccess? Сложи все свои файлы в секретную папочку, запрети к ней доступ, а потом разрешай избранным - по рефереру, по установленной куке, по хитрой ссылочке с lifetime (последний вариант самый надежный, но требует перезаписывания .htaccess каждый раз).

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

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

    SOCRAT

    Регистр.:
    6 июн 2006
    Сообщения:
    275
    Симпатии:
    54
    Своеобразный суппорт, просили показать скрипт который не работает, указал, сказали выключить сайф мод, сказал что выключил его через неделю после начала пользования их услугами, ответили: "Дайте нам знать если ошибка повториться", написал что сейв мод выключен и это не решило проблему, вновь спросили, а вы выключили сейф мод?! :D Чую разговор будет долгим..

    Но сейчас вроде работает, спасибо, venetu, если вновь повториться ошибка попробую твой метод.
     
  10. SOCRAT

    SOCRAT

    Регистр.:
    6 июн 2006
    Сообщения:
    275
    Симпатии:
    54
    Рано обрадовался, сново началось :confused:. Как узнать из-за чего прерывается скачка?
     
Статус темы:
Закрыта.