Я пытаюсь предоставить файлы .pdf
и .doc
авторизованным пользователям на веб-сайте. Пользователь может видеть только страницу выбора файла при входе в систему, но это не мешает неавторизованному пользователю просматривать документы, если у них есть знания полного URL-адреса.
Как я могу предотвратить доступ неавторизованных пользователей к этим файлам?
ответ довольно прост, @Jon Stirling опубликовал это, когда я печатал, но я объясню вам немного больше
один помещает ваши файлы за пределы вашего общедоступного html-каталога,
Настройка EG cpanel
user/public_html /public_html/download.php user/documents/ /documents/file.doc /documents/file.pdf
@dhh отправил файл php файла другой, что вам понадобится правильный тип mime, вот расширение на его код, чтобы наилучшим образом сделать 1 загрузку файла, а 2 разрешить разные типы файлов
downlaod.php
//check users is loged in and valid for download if not redirect them out // YOU NEED TO ADD CODE HERE FOR THAT CHECK // array of support file types for download script and there mimetype $mimeTypes = array( 'doc' => 'application/msword', 'pdf' => 'application/pdf', ); // set the file here (best of using a $_GET[]) $file = "../documents/file.doc"; // gets the extension of the file to be loaded for searching array above $ext = explode('.', $file); $ext = end($ext); // gets the file name to send to the browser to force download of file $fileName = explode("/", $file); $fileName = end($fileName); // opens the file for reading and sends headers to browser $fp = fopen($file,"r") ; header("Content-Type: ".$mimeTypes[$ext]); header('Content-Disposition: attachment; filename="'.$fileName.'"'); // reads file and send the raw code to browser while (! feof($fp)) { $buff = fread($fp,4096); echo $buff; } // closes file after whe have finished reading it fclose($fp);
PS здесь список abig mime-типов, если вы хотите добавить поддержку для других файлов http://www.hansenb.pdx.edu/DMKB/dict/tutorials/mime_typ.php
Что вы можете сделать, это предоставить эквивалент прокси-сервера PHP для файлов.
Поместите файлы за пределы webroot, а затем напишите сценарий, который проверяет, что пользователю разрешен доступ. Если нет, перенаправьте их, если они это сделают, установите соответствующие заголовки и выведите данные файла.
Вы должны хранить все загрузки вне вашего общедоступного / пользовательского корня doc (но, конечно, внутри вашего сервера) и добавить сценарий загрузки для отправки загрузки, если пользователь авторизован.
Вот пример того, как «отправить» файл для его загрузки.
$file = "ireland.jpg"; $fp = fopen($file,"r") ; header("Content-Type: image/jpeg"); while (! feof($fp)) { $buff = fread($fp,4096); print $buff; }
Это помогло мне: я поместил файл .pdf и .htaccess со следующим кодом в обычной папке (я назвал ее «docs») на моем веб-сервере apache.
Order Deny,Allow Deny from all Allow from 127.0.0.1 <Files /index.php> Order Allow,Deny Allow from all </Files>
Затем я взял код от Мартина Баркерса выше, изменил путь к файлу «docs / sample.pdf» и вставил его в файл .php в корневом каталоге. Вот и все. Вы не можете получить доступ к файлу на URL-адрес сейчас, но его можно загрузить, если вы запустите test.php.