Я ранее размещал здесь:
Контроль доступа для пробной подписки
Поскольку это новый вопрос, основанный на предложениях, я думал, что должен начать новую должность. Если это должно было быть редактирование, пожалуйста, дайте мне знать в будущем.
Я думаю, что решение, с которым я собираюсь контролировать доступ, – загрузить файл и хеш-имя. Файл будет в формате:
/uploads/#############.pdf
Ссылка будет отправлена подписчикам. В первый раз, когда они приходят на сайт, им будет предложено создать «булавку» и «подсказку», чтобы помнить. Затем можно получить доступ к целевой странице, чтобы перечислить их элементы через адрес электронной почты / контактный комбо.
Мой вопрос: я знаю, что могу контролировать доступ к странице, которая показывает, какие элементы они могут просматривать, но есть ли способ контролировать / uploads / [файл] только для загрузки после какой-либо программной проверки? Я не могу придумать, как это сделать …
Еще раз спасибо. D.
Ваши pdf-файлы не обязательно должны находиться в каталоге, который можно просмотреть. Они могут быть вне вашего веб-корня. Таким образом, никто не может реально перейти на сайт www.yoursite.ext/uploads/2395wrfhgt.pdf
чтобы загрузить его самостоятельно или поделиться ссылкой с другими.
Чтобы загрузить pdf-файл, вы получите специальный скрипт, который будет выполнять все проверки доступа к пользователю, запрашивающему его, и если все в порядке, он установит соответствующие заголовки, прочитает файл из файловой системы и распечатает его до Пользователь.
Итак, скажем, ваш сайт находится в /var/www/site/htdocs/
и вы загружаете каждый PDF в /var/www/site/uploads/
. Вам даже не нужно хэшировать имена файлов, но вместо этого можно сохранить их красиво названными для упрощения организации.
Затем все ссылки для загрузки файла будут сделаны, чтобы указать на www.yoursite.ext/download.php?id={fileid}
Ваш файл download.php выполнит все проверки доступа (правильно зарегистрировался, имеет разрешения на загрузку файла и т. Д.), А затем выполните следующие действия:
$pathToPdf = '/var/www/site/uploads/some.pdf' ; header('Content-Type: application/pdf'); header('Content-Length: ' . filesize($pathToPdf)); header('Content-Disposition: attachment; filename=' . 'some.pdf'); readfile($pathToPdf) ;
И это в значительной степени. Как только вы получите эту работу, вы сможете изучить несколько вещей: