Я создаю приложение, в котором у пользователя есть доступ для просмотра множества PDF, представленных ему в виде таблицы. В каждой строке также есть флажок, который позволяет пользователю проверять или не проверять следующее действие, которое я опишу позже.
Эти флажки находятся внутри тегов формы, и после этого есть кнопка отправки, которая отправляет ID всех файлов внутри массива методом POST через AJAX REQUEST в файл PHP.
Запрос AJAX выглядит следующим образом:
$.ajax({
url: link,
type: 'POST',
data: $(this).serialize(),
success: function(result) {
if (result == 'ok') {
if (redirect) {
window.location.replace(redirect);
} else {
window.location.reload();
}
} else {
if (callback) {
$('#' + callback).html('<div>' + result + '</div>');
} else {
alert(result);
}
}
}
});
Так что ничего особенного, все данные поста взяты и отправлены в конкретный файл PHP.
Далее, на стороне файла PHP - есть алгоритм, который проверяет, есть ли у пользователя доступ ко всем файлам по полученным идентификаторам метода записи. Таким образом, есть простой цикл в сочетании с SQL-запросом.
Когда LOOP проверяет, что у него есть действительный доступ - я создаю один большой файл, состоящий из всех файлов, которые он выбирал по предыдущим флажкам. В этом случае я использую mPDF, и объединение файлов для меня не проблема.
Объединенный файл затем создается на сервере и имеет определенное имя.
А теперь - как я уже говорил, этот файл должен быть очень закрытым, поэтому после того, как пользователь загрузит его, я хочу, чтобы скрипт также удалил этот файл. Но я не могу справиться с частью загрузки.
Я пытался отправить заголовки со стороны PHP-файла, но он заканчивается, как будто странные символы выводятся в элемент div обратного вызова вместо отображения диалога загрузки.
Мой код для отправки заголовков выглядит ниже
$file = __PATH_TO_FILE__ . 'MaJjYzA4OGE4N2Q0MjUwNmJkZDQ0ZmZm.pdf'; //file which in fact exists
header('Content-type: application/download'); //or event tried with application/pdf => no difference
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="'. $file .'"');
return readfile($file);
Для краткости, вместо диалогового окна + загрузка - странные символы закрывают область обратного вызова.
Если вы, ребята, знаете, что происходит и что я должен сделать в этом конкретном сценарии, я буду рад помощи. Кроме того, я буду более благодарен, если вы предложите мне, что делать с удалением файла после того, как пользователь загрузит его, или даже отмените диалоговое окно с приглашением, чтобы файл больше не оставался на сервере.