Определить что файл был скачан

Discussion in 'PHP' started by Apeckou, 10 Aug 2012.

  1. Apeckou

    Apeckou Elder - Старейшина

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    ....целиком

    как сделать? А то у меня на ФО партнерка работает - за загрузку файла денежка. Так вот мне надо как-то определять что файл был скачан целиком, а не брошен на середине, иначе накрутчики набегут. Пробовал сделать вот так:

    PHP:
    $tot_output=0;
    $myfp=fopen($loadFile,'r');
    while(!
    feof($myfp))         {
    echo(
    fread($myfp1));
    $tot_output+=1;
    ob_flush(); 
    ob_clean();
    flush();
                    }
    fclose($myfp);
    но в хроме достаточно открыть диалог сохранения файла и тупо нажать "отмена" не качая файл, а скрипт все равно возвращает полный размер будто он скачан. Как сделать, возможно ли это?
     
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Apeckou 1) кусками по 1 байту лучше не отдавать файл. Хотя бы по размеру блока читайте

    2) Маленькие файлы на самом деле скачиваются, что хромом, что другими браузерами. То что они вы решаете не сохранять их на жесткий диск - это ваша проблема и отследить это нельзя

    3) Проверяйте во время отдачи http://php.net/connection_status Если прервется до завершения чтения файла - файл не скачан
     
    _________________________
    1 person likes this.
  3. Apeckou

    Apeckou Elder - Старейшина

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    теперь делаю вот так


    PHP:
    $tot_output=0;
    $myfp=fopen($loadFile,'r');
    while(!
    feof($myfp))         {
    echo(
    fread($myfp1024));
    if(
    connection_status()!=0){break;$tot_output=-1;}
    $tot_output+=1024;
    ob_flush(); 
    ob_clean();
    flush();
                    }
    fclose($myfp);
    но с маленькими файлами даже если отмену нажать - все равно скрипт говорит что все отдал...хныг(
    у меня ж так бабло люди с проксей будут накручивать наверн?
     
  4. Apeckou

    Apeckou Elder - Старейшина

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    впрочем на моем сайте стоит капча, чтобы заработать на мелких файлах нужно будет ее распознавать, а антигейт за это тоже денежку просит -> не выгодно. так что пока я спкоен. пасиба отписавшимся, ставлю плюсы
     
  5. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,691
    Likes Received:
    3,146
    Reputations:
    236
    Apeckou, ничего не сделать.
    возьму и напущу файл-качалку, что работает в несколько http потоков одновременно.
    как найти начало, конец и фрагменты файла?

    не видно его? а он таки есть и скачен.
     
  6. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    altblitz Скрипт отдает файл последовательно. Докачка (а следовательно многопоточная загрузка) - не поддерживается.
     
    _________________________
  7. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,691
    Likes Received:
    3,146
    Reputations:
    236
    ясно, Gifts.
    только это скрипт не на сервере, а на стороне клиента.
    обычная реализация аудио/видео-потока/stream + капча.
     
  8. VY_CMa

    VY_CMa Green member

    Joined:
    6 Jan 2012
    Messages:
    917
    Likes Received:
    492
    Reputations:
    724
    _________________________
  9. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Чем readfile/fread не подходит для http-стрима? И о каком скрипте идет речь? С этого момента поподробнее :rolleyes: :rolleyes:
     
  10. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,691
    Likes Received:
    3,146
    Reputations:
    236
    именно это реализовано в Offline Explorer и FlashGet,
    скачивать файл в несколько потоков,
    если сервер поддерживает такую фичу HTTP 1.1

    если нужен поток непрерывный - аудио/видео,
    понятно, что будет один поток.
     
  11. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Так вот это никакого отношения не имеет к скрипту отдачи файла. Никакого. Такие скрипты не поддерживают скачивания по частям. Gifts объяснил конкретно.
    По теме connection_status и connection_abort должны помочь.
     
  12. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,691
    Likes Received:
    3,146
    Reputations:
    236
    верить ли тебе, либо авторам тех прог?
     
  13. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Я тебе про скрипт readfile, ты мне про роги. Верь кому хочешь, но факт - есть факт.
     
  14. altblitz

    altblitz Elder - Старейшина

    Joined:
    5 Jun 2009
    Messages:
    3,691
    Likes Received:
    3,146
    Reputations:
    236
    факт - то, что автор проги Offline Explorer,
    толково рассказывает о способах слива файлов в много потоков,
    и обхода ограничений на стороне клиента с JS.
     
  15. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Да, ты сможешь скачивать в несколько потоков один и тот же файл, но это будет несколько разных одинаковых файлов. Да, ты сможешь докачать файл, скачав его заново и дополнив предыдущий. Сейчас вся эта тема своего рода оксюморон, readfile и fread используют, например, для того, чтобы нельзя было докачивать файлы, использовать каптчу на загрузке файла или получить исходный путь.