сжатие нескольких файлов, чей адрес хранится в таблице MySQL

На моем сервере хранится несколько файлов, которые можно найти по идентификатору пользователя и по их адресу в моей таблице.

у них разные типы файлов, такие как docx, jpeg и pdf.

У меня есть метод jquery post, который отправит user_id в соответствующий php-файл, в котором я выполню свой запрос, чтобы получить адреса файлов пользователей в виде массива.

$("#download_btn").click(function () {
var uni_id = $("#uni_selection_filter").val();

$.post("Requests/zipCorsponds.php", //Required URL of the page on server
{   // Data Sending With Request To Server
Get_arch_letters : true,
user_id : vuser_id,
user_role : "<?php echo $_SESSION["role"]; ?>",
section_num : "<?php echo $_SESSION['section_id'] ?>",
uni_id : uni_id
},
function(response){  // Required Callback Function
$("#dynamic_table").html(response);
});

});

Теперь я добавил ниже метод после запроса, чтобы сжать эти файлы и отправить результат для просмотра, который jquery, что пользователь сможет загрузить все его / ее файлы.

   if ($_POST['Get_arch_letters']) {
$user_id = $_POST['user_id'];
$user_role = $_POST['user_role'];
$section_num = $_POST['section_num'];
$uni_id = $_POST['uni_id'];

if ($user_role == 'executive_manager') {
$load_corspnd_letter = $DBM->RunQuery("SELECT at_corspond_file.corspond_file FROM at_corspnd
INNER JOIN at_corspond_file ON (at_corspnd.id = at_corspond_file.corspond_id)
WHERE at_corspnd.uni_id = '$uni_id' ", true, false);
}

$files = mysqli_fetch_assoc($load_corspnd_letter);

# create new zip opbject
$zip = new ZipArchive();

# create a temp file & open it
$tmp_file = 'Resume.zip';
$zip->open($tmp_file, ZipArchive::CREATE);

# loop through each file
foreach($files as $file){

if (!file_exists('../'.$file)) { die($file.' does not exist'); }

if (!is_readable('../'.$file)) { die($file.' not readable'); }

# download file
$download_file = file_get_contents('../'.$file);

#add it to the zip
$zip->addFile(basename($file),$download_file);
}

# close zip
$zip->close();echo 'Requests/'.$tmp_file;}

но что я получаю в результате: PK|H�IPK|H�I��PK.

как я могу это сделать?


Обновить

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

   # create new zip opbject
$zip = new ZipArchive();

# create a temp file & open it
$tmp_file = 'Resume.zip';
if($zip->open($tmp_file, \ZipArchive::CREATE | ZipArchive::OVERWRITE) !== true)
echo 'cannot create zip';

# loop through each file
foreach($files as $file){

if (!file_exists('../'.$file)) {
continue;
}

if (!is_readable('../'.$file)) { die($file.' not readable'); }

#add it to the zip
$zip->addFile(basename($file));
}

# close zip
$zip->close();echo 'Requests/'.$tmp_file;

3

Решение

Вы не можете скачать файл с вашим подходом. Прямо сейчас ваш код пытается дисплей результат вашего звонка на сервер.
У вас есть 2 варианта, чтобы сделать эту работу.

1. Используя ваш текущий код PHP

PHP-код будет работать, если вызывается прямо в браузере. Вы можете использовать свой '#download_btn' отправить форму с правильными значениями ввода

HTML

<form action="Requests/zipCorsponds.php" method="post" id="frm">
<input type="hidden" name="Get_arch_letters" value="true" />
<input type="hidden" name="user_role" value="<?php echo $_SESSION["role"]; ?>" />
...
<input type="hidden" name="uni_id" id="uni_id" value="" />
</form>

JQuery

$("#download_btn").click(function () {
var uni_id = $("#uni_selection_filter").val();
$("#uni_id").val(uni_id);
$("#frm").submit();
});

.

2. Используя ваш текущий подход к посту jquery

Вам нужно будет изменить функцию обратного вызова, чтобы загрузить возвращенный файл.

JQuery

...
function(response){  // Required Callback Function
window.location = response;
});
...

И изменить код php, чтобы вернуть путь к файлу, а не сам файл. Вам также необходимо указать имя файла с правильным расширением.

PHP

...
# create a file & open it
$tmp_file = 'Resumes.zip';
$zip->open($tmp_file, ZipArchive::CREATE | ZipArchive::OVERWRITE);

# loop through each file
foreach($files as $file){

if (!file_exists('../'.$file)) { die($file.' does not exist'); }

if (!is_readable('../'.$file)) { die($file.' not readable'); }

#add file to the zip
$zip->addFile(basename('../'.$file));
}
# close zip
$zip->close();

# send the file to the post request
echo 'Requests/'.$tmp_file;
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]