无法从PHP网络应用程序强制ZIP下载

时间:2015-06-25 20:05:56

标签: php zip

这个php文件应该是:

  1. 从另一页上的表单收到一条信息
  2. 使用此信息创建要添加到zip文件的文件路径数组
  3. 使用包含的类创建动态命名的zip文件。
  4. 强制下载新创建的zip文件
  5. 数字1-3正在完美运作。

    该页面甚至强制下载正确命名并且大小合适的zip文件,但是当我尝试打开它时,它表示该文件无效。我在搜索中遇到过类似的问题,但我还没有找到解决方案。

    如果我将新创建的zip的直接URL输入浏览器,该文件将完美下载并打开。事实上,我的临时修复是创建一个动态的文件直接链接:/

    我应该提一下,这是托管爸爸经济计划。

    <?php
    error_reporting(0);
    include "gavScripts/connect_to_mysql.php";
    require_once 'Zipper.php';
    
    
    // prepare the file paths to add to the zip file and find the job/client name (for naming the zip folder)
    if(isset($_POST['jobName']))
    {
        $clientID = $_POST['jobName'];
    
        $clientSQL = mysql_query("SELECT clientName FROM job_client WHERE clientID = $clientID");
    
        while($clientRow = mysql_fetch_array($clientSQL))
        {
            $clientName = $clientRow['clientName'];
        }
    
        $zipSQL = mysql_query("SELECT filePath FROM job_expense WHERE clientID = $clientID");
    
        While($zipRow = mysql_fetch_array($zipSQL))
        {
            $filePaths[] = $zipRow['filePath'];
        }
    }
    
    //create the zip folder and store the requested files
    $zipper = new Zipper();
    $zipper->add($filePaths);
    $zipper->store('invoices/' . $clientName . '_Invoices.zip');
    
    //download the zip
    $fileDownload = 'invoices/' . $clientName . '_Invoices.zip';
    $fileName = basename($fileDownload);
    
    header("Content-Type: application/zip");
    header("Content-Disposition: attachment; filename=" . $fileName . "");
    header("Content-Length: " . filesize($fileDownload));
    
    readfile($fileDownload);
    ?>
    

2 个答案:

答案 0 :(得分:0)

您的脚本末尾可能有尾随空格,这会破坏您的zip文件。结束\r后是否有\n?>(或两者)?尝试删除最终可选的结束?>

答案 1 :(得分:0)

尝试以下方法:

header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime($fileName)).' GMT');
header('Cache-Control: private',false);
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="'.basename($fileName).'"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($fileName));
header('Connection: close');
readfile($fileName);
exit();

可能有帮助。