Правильно, поэтому у меня есть решение.Если кто-то может придумать лучший способ сделать это, пожалуйста, дайте мне знать, но сейчас это работает отлично!Я нашел библиотеку JS под названием PDFObject , которую можно использовать для создания кросс-браузерного решения для простого встраивания PDF-файлов в HTML-документ.При этом я могу передать ссылку на PDF-файл на сервер вместе с целевым тегом div для его встраивания (который в моем случае я настроил внутри модального окна, чтобы мы оставались на той же странице).
Поскольку мы остаемся на одной странице, я могу заблокировать доступ ко всей странице, используя функцию, которую я написал ранее в проекте, которая перенаправляет пользователя на индекс, если у них нет нужного уровня доступа.,Что-то вроде этого будет работать:
function checkSession() {
if(empty($_SESSION)) {
header("Location: /?cheeky_monkey");
}
}
Если пользователь попытается получить прямой доступ к PDF-файлу, этот код в htaccess блокирует их.Он разрешает доступ только в том случае, если на него нацелено приложение:
SetEnvIf Referer "localhost" is_local_referer
<FilesMatch "\.pdf$">
Require env is_local_referer
</FilesMatch>
В таком случае все, что нужно, - это бросить URL-адрес в тег скрипта для загрузки при нажатии на PDF, выполнено.через эту последовательность кода:
- Сначала нам нужно получить URL для PDF (возможно, вы сможете пропустить этот шаг)
Начнем с того, что этот javascript вызывается всякий раз, когда кто-то нажимает для просмотра PDF (этот вызов просто вкладывается как атрибут onclick):
function viewMedia(projectID, type, item) {
$.ajax({
url: '../includes/function.projects.php?cid=' + projectID + '&type=' + type + '&view-media=' + item,
success: function(data) {
$('.pdf-script').html('<script>PDFObject.embed("' + data + '", "#the-pdf");</script>');
$('#viewMediaModal').modal('toggle');
}
})
}
Это код, запускаемый на странице php.
public function viewMedia($item) {
$mediaItems = unserialize($this->media);
$file = '/path/to/pdf/' . $mediaItems[$item]['file'];
echo $file;
}
Пример возвращаемых данных из этой функции:
/path/to/pdf/example-pdf.pdf
Использование этого для загрузки PDF
Когда у нас есть правильный URL для PDF, и AJAX возвращается как успешный, полученные данные могут быть использованы для повторной генерации javascriptна этот раз с новой ссылкой PDF:
success: function(data) {
$('.pdf-script').html('<script>PDFObject.embed("' + data + '", "#the-pdf");</script>');
$('#viewMediaModal').modal('toggle');
}
Вот как выглядит структура этого модального тела:
<div class="modal-body">
<div id="the-pdf"></div>
<div class="pdf-script" style="display: none;">
<script>PDFObject.embed('', '#the-pdf');</script>
</div>
</div>
Результат
Результат приведенной выше кодовой последовательности переключает модальное окно, которое выглядит следующим образом:
И если пользователь пытается получить доступ к файлу напрямую: