Как получить доступ к файлам с определенной страницы php, которые защищены htaccess?

0

У меня есть страница (пример: http://mypage.com/getfiles.php), где пользователь может ввести код ключа, а затем страница создает ссылки (html http://mypage.com/download/myfile.zip) на файлы zu download и пользователь может щелкнуть по ссылкам, чтобы получить файлы.

Проблема в том, что файлы хранятся в папке (загрузке), которая защищена, поэтому никто не может напрямую обращаться к файлам по адресу http://mypage.com/download/myfile.zip.

Я пробовал некоторые differnt думает, что я читаю в Интернете, чтобы изменить файл.htaccess для доступа к доступу с определенной страницы... но это не сработало!

Итак, у меня есть 2 вопроса: 1. Это самый простой способ? Или лучше использовать другой способ предоставить пользователю доступ к файлам (размер файлов от 50 МБ до 500 МБ). 2. Если идея настроить файл.htaccess - лучший способ, что с ним не так?

# set an environtment variable "noauth" if the request starts with certain string
SetEnvIf Request_URI "^http://mypage.com/getfiles.php" noauth=1

AuthType Basic
AuthName "Access to /download"
AuthUserFile ****
Require user ****

# Here is where we allow/deny
Order Deny,Allow
Satisfy any
Deny from all
Require valid-user
Allow from env=noauth

Или мне нужно направлять пользователя к скрипту php, который перенаправляет его в файл, потому что со ссылкой он не работает?

Большое спасибо !

  • 0
    Почему бы вам просто не добавить код ключа к URL, проверить его действительность и загрузить файл, в противном случае - нет?
Теги:
.htaccess

2 ответа

3
Лучший ответ

Вы можете создать скрипт, скажем, download.php под http://mypage.com/, который eventaully скопировать содержимое из файла "download/myfile.zip" и автоматически загрузить его пользователю.

Пример кода:

// Add some keycode security, then download file for user.

$file_url = 'download/myfile.zip';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); 
readfile($file_url); // do the double-download-dance (dirty but worky)
  • 0
    У меня есть еще один вопрос :), поскольку я вижу, что в файле для чтения есть комментарий "// сделать танец двойной загрузки (грязный, но рабочий)" ... Вы можете объяснить танец двойной загрузки? Похоже, это не эффективный способ :) это будет проблемой, потому что у меня есть несколько больших файлов (100 - 500 МБ)?
  • 1
    ха-ха, не будет, потому что zip-файлы можно загружать напрямую, но поскольку у вас есть проблемы с безопасностью, код загрузит файл для вас, а не для самого веб-сервера, так что скачивайте дважды :)
1
  1. Пусть эта базовая аутентификация будет "как есть" для тех, кто непосредственно приходит в папку /download.
  2. Внесите эти изменения в getfiles.php. Вместо прямой ссылки на zip файл вы можете создать такую ссылку:

    1. Проверьте keycode и сохраните его в сеансе.
    2. Если keycode действителен, введите ссылку для загрузки: http://mypage.com/files.php?path=/download/myfile.zip
    3. Внутри нового файла files.php проверьте, имеет ли сеанс действительный keycode. Если да, то доступ к файлу с использованием операций с файлами PHP с правильным заголовком Content-Type.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню