2010-09-20 3 views
2

Я размещал здесь:управление доступом к файловой системе с помощью PHP

Controlling Access for Trial Subscription

Поскольку это новый вопрос на основе предложений там, я думал, что я должен начать новую должность. Если это должно было быть редактирование, пожалуйста, дайте мне знать в будущем.

Я думаю, что решение, с которым я собираюсь контролировать доступ, это загрузить файл и хеш-имя. Файл будет в формате:

/uploads/#############.pdf

Ссылка будет отправлена ​​подписчикам. В первый раз, когда они приходят на сайт, им будет предложено создать «булавку» и «подсказку», чтобы помнить. Затем можно получить доступ к целевой странице, чтобы перечислить их элементы через адрес электронной почты/контактный комбо.

Мой вопрос: я знаю, что могу контролировать доступ к странице, которая показывает, какие элементы они могут просматривать, но есть ли способ контролировать/uploads/[файл], чтобы быть загружен только после каких-либо программная проверка? Я не могу придумать никакого способа сделать это ....

Еще раз спасибо. D.

ответ

1

Ваши файлы в формате 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) ; 

И это в значительной степени. Как только вы получите эту работу вы можете посмотреть на улучшение несколько вещей:

  • использовать mod_rewrite или подобный, чтобы иметь реальное имя файла в формате PDF в ссылке, которая помогает некоторые браузеры понимают, что они должны загрузить его: www.yoursite.ext/скачать/{FILEID} .pdf
  • рассмотреть возможность использования веб-сервера вместо PHP, чтобы служить файлы, например X-Sendfile заголовок
+0

большое спасибо. Это похоже на действительно хорошее решение. Я ценю помощь. – Don

Смежные вопросы