....целиком как сделать? А то у меня на ФО партнерка работает - за загрузку файла денежка. Так вот мне надо как-то определять что файл был скачан целиком, а не брошен на середине, иначе накрутчики набегут. Пробовал сделать вот так: PHP: $tot_output=0; $myfp=fopen($loadFile,'r'); while(!feof($myfp)) { echo(fread($myfp, 1)); $tot_output+=1; ob_flush(); ob_clean(); flush(); } fclose($myfp); но в хроме достаточно открыть диалог сохранения файла и тупо нажать "отмена" не качая файл, а скрипт все равно возвращает полный размер будто он скачан. Как сделать, возможно ли это?
Apeckou 1) кусками по 1 байту лучше не отдавать файл. Хотя бы по размеру блока читайте 2) Маленькие файлы на самом деле скачиваются, что хромом, что другими браузерами. То что они вы решаете не сохранять их на жесткий диск - это ваша проблема и отследить это нельзя 3) Проверяйте во время отдачи http://php.net/connection_status Если прервется до завершения чтения файла - файл не скачан
теперь делаю вот так PHP: $tot_output=0; $myfp=fopen($loadFile,'r'); while(!feof($myfp)) { echo(fread($myfp, 1024)); if(connection_status()!=0){break;$tot_output=-1;} $tot_output+=1024; ob_flush(); ob_clean(); flush(); } fclose($myfp); но с маленькими файлами даже если отмену нажать - все равно скрипт говорит что все отдал...хныг( у меня ж так бабло люди с проксей будут накручивать наверн?
впрочем на моем сайте стоит капча, чтобы заработать на мелких файлах нужно будет ее распознавать, а антигейт за это тоже денежку просит -> не выгодно. так что пока я спкоен. пасиба отписавшимся, ставлю плюсы
Apeckou, ничего не сделать. возьму и напущу файл-качалку, что работает в несколько http потоков одновременно. как найти начало, конец и фрагменты файла? не видно его? а он таки есть и скачен.
altblitz Скрипт отдает файл последовательно. Докачка (а следовательно многопоточная загрузка) - не поддерживается.
ясно, Gifts. только это скрипт не на сервере, а на стороне клиента. обычная реализация аудио/видео-потока/stream + капча.
Чем readfile/fread не подходит для http-стрима? И о каком скрипте идет речь? С этого момента поподробнее
именно это реализовано в Offline Explorer и FlashGet, скачивать файл в несколько потоков, если сервер поддерживает такую фичу HTTP 1.1 если нужен поток непрерывный - аудио/видео, понятно, что будет один поток.
Так вот это никакого отношения не имеет к скрипту отдачи файла. Никакого. Такие скрипты не поддерживают скачивания по частям. Gifts объяснил конкретно. По теме connection_status и connection_abort должны помочь.
факт - то, что автор проги Offline Explorer, толково рассказывает о способах слива файлов в много потоков, и обхода ограничений на стороне клиента с JS.
Да, ты сможешь скачивать в несколько потоков один и тот же файл, но это будет несколько разных одинаковых файлов. Да, ты сможешь докачать файл, скачав его заново и дополнив предыдущий. Сейчас вся эта тема своего рода оксюморон, readfile и fread используют, например, для того, чтобы нельзя было докачивать файлы, использовать каптчу на загрузке файла или получить исходный путь.