Итак, почти реализовал небольшое ТЗ — возможно кому-то пригодятся мои наработки…
Допустим, на сайте под управлением CMS Bitrix, необходимо определённому списку пользователей дать возможность скачивать определенный файл и фиксировать количество скачиваний.
Создаём группу для юзеров, которым можно скачивать (у меня получился ID=9)
На пользователей, вешаем пользовательское поле UF_CNT — куда будем складировать количество скачиваний файла.
Собственно — привожу содержимое скрипта, непосредственно «отдающего» нужный файл:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?require($_SERVER[«DOCUMENT_ROOT»].«/bitrix/modules/main/include/prolog_before.php»); $gID = 9; if ( CSite::InGroup( array($gID))) { // крутим счётчик // получаем текущее значение global $USER; $arFilter = array(«ID» => $USER->GetID()); $arParams[«SELECT»] = array(«UF_CNT»); $arRes = CUser::GetList($by = ‘ID’, $order = ‘ASC’, $arFilter,$arParams); if($res = $arRes->Fetch()) { $plex_cnt = $res[«UF_CNT»]+1; } // обновляем $user = new CUser; $user->Update($USER->GetID(), array(«UF_CNT» => $plex_cnt) ); // отдаём файл $filename = ‘file-info.zip’; 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/force-download»); header(«Content-Disposition: attachment; filename=\»».basename($filename).«\»;» ); header(«Content-Transfer-Encoding: binary»); header(«Content-Length: «.filesize($filename)); readfile(«$filename»); exit(); } header(‘Location: …………’); |
Ну и ссылочку на данный скрипт отдаём только «правильным» пользователям. Проверка та-же if ( CSite::InGroup( array($gID))) { ….. }
Да, ещё момент — прямое скачивание файла file-info.zip нужно запретить в конфе nginx-а, т.к. именно он отвечает за отдачу статики location = /paht/file-info.zip { deny all }
(далеко не сразу этот момент вспомнил когда не мог понять — почему не работает запрет на скачивание именно этого файла установленный мной в .htaccess при правильной обработке в нём других правил)
Один комментарий на «“Битрикс. Учет скачиваний файла пользователями.”»
Круто! Давно хотел сделать подобную вещь! А для вордпреса сделаешь скрипт и мануал по установке! Буду очень благодарен!