邮编多个数据库PDF BLOB文件(Zip multiple database PDF blob f

2019-10-23 02:38发布

我有一个包含众多PDF BLOB文件的数据库表。 我试图将所有的文件合并到,我可以下载并打印一个ZIP文件中。

请帮忙!

<?php 
    include '../config.php';
    include '../connect.php';

    $session = $_GET['session'];

    $query = "SELECT $tbl_uploads.username, $tbl_uploads.description,
                     $tbl_uploads.type, $tbl_uploads.size, $tbl_uploads.content,
                     $tbl_members.session
    FROM $tbl_uploads
    LEFT JOIN $tbl_members
    ON $tbl_uploads.username = $tbl_members.username
    WHERE $tbl_members.session = '$session'";
    $result = mysql_query($query) or die('Error, query failed');


    $files = array();
    while(list($username, $description, $type, $size, $content) = 
     mysql_fetch_array($result)) {

        $files[] = "$username-$description.pdf";
    }

    $zip = new ZipArchive; 
    $zip->open('file.zip', ZipArchive::CREATE); 
    foreach ($files as $file) { 
      $zip->addFile($file); 
    } 
    $zip->close(); 

    header('Content-Type: application/zip'); 
    header('Content-disposition: attachment; filename=filename.zip'); 
    header('Content-Length: ' . filesize($zipfilename)); 
    readfile($zipname); 

    exit();


    ?>

Answer 1:

您的PDF数据被存储在BLOB字段的数据库中,我没有看到你把这个数据在文件中。 所以,你的ZIP将不包含任何文件,因为你没有真正的现有的文件添加到它。

这是目前你在做什么:

  • 从数据库中读取数据
  • 创建文件名的阵列
  • 创建一个可能不存在的文件名的ZIP

这个你应该做的:

  • 从数据库中读取数据
  • 创建文件名的阵列
  • 写下您BLOB数据到该文件
  • 创建文件存在的ZIP

例:

    $files = array();
    while(list($username, $description, $type, $size, $content) = 
     mysql_fetch_array($result)) {
        $files[] = "$username-$description.pdf";

        // write the BLOB Content to the file
        if ( file_put_contents("$username-$description.pdf", $content) === FALSE ) {
          echo "Could not write PDF File";
        }
    }

是否适合你呢,你应该做的:

写在临时文件夹(也许有一定的帮助文件http://php.net/tempnam )别的地方,你的存档过程后,也许将其删除。

还有一个在你的代码中的第二个问题,你用$ zipfilename计算内容长度和$ zipname读取该文件并没有变量创建压缩。 由于$ zipfilename和$ zipname没有定义,这将无法工作。

你应该定义$ zipfilename用ZIP文件名和创建压缩文件时,也使用相同的变量。

例:

    // a temp filename containing the current unix timestamp
    $zipfilename = 'temp_' . time() . '.zip';

    $zip->open($zipfilename, ZipArchive::CREATE);
    foreach ($files as $file) { 
       $zip->addFile($file); 
    } 
    $zip->close(); 

    header('Content-Type: application/zip'); 
    header('Content-disposition: attachment; filename=filename.zip'); 
    header('Content-Length: ' . filesize($zipfilename)); 
    readfile($zipfilename); 


Answer 2:

PDFTK将合并多个PDF文件,以及PDFsam ..



文章来源: Zip multiple database PDF blob files