PHP код для сжатия всех файлов, как почтовый индекс не работает нормально

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

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

lginin

logersutil.php

lgininh.js

Readme.md

И мой код:

<?php
if(isset($_POST['download'])){
try{
$db_conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USERNAME,DB_PASSWORD);
$db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$post_stmt = $db_conn->prepare("SELECT * FROM jailorgchild WHERE jailchildbasname = :BasNameJa");
$post_stmt->bindParam(':BasNameJa', basename(dirname(__FILE__)));
$post_stmt->execute();
while ($rowss = $post_stmt->fetch(PDO::FETCH_ASSOC)){

$files = array(''.$rowss["jailchillink"].'','codejail.cj');

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

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

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

# download file
$download_file = file_get_contents($file);

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

}

# close zip
$zip->close();

# send the file to the browser as a download
header('Content-disposition: attachment; filename='.basename(dirname(__FILE__)).'.zip');
header('Content-type: application/zip');
readfile($tmp_file);

} }catch (PDOException $e){ echo 'Connection failed: ' . $e->getMessage();}
}
?>

0

Решение

В своем текущем коде вы в основном создаете 1 новый zip-файл и возвращаете его для каждой строки. Поскольку клиент может прочитать только 1 ответ, он, очевидно, никогда не увидит более 1 строки.

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

<?php
if(isset($_POST['download'])){
try{
$db_conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USERNAME,DB_PASSWORD);
$db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$post_stmt = $db_conn->prepare("SELECT * FROM jailorgchild WHERE jailchildbasname = :BasNameJa");
$post_stmt->bindParam(':BasNameJa', basename(dirname(__FILE__)));
$post_stmt->execute();

// here we create a temporary array to hold all the filenames
// and fill it with the file you always want to have inserted
$files = array('codejail.cj');
while ($rowss = $post_stmt->fetch(PDO::FETCH_ASSOC)){
// now fill the array with your files
$files[] = $rowss['jailchillink'];
}

// and now we finally start processing them all, after having finished reading from the DB
# create new zip opbject
$zip = new ZipArchive();

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

# loop through each file
foreach($files as $file){
# download file
$download_file = file_get_contents($file);

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

# close zip
$zip->close();

# send the file to the browser as a download
header('Content-disposition: attachment; filename='.basename(dirname(__FILE__)).'.zip');
header('Content-type: application/zip');
readfile($tmp_file);

} catch (PDOException $e){
echo 'Connection failed: ' . $e->getMessage();
}

}
?>

0

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

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

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