无法为多个大文件创建zip并取消链接

时间:2018-02-08 03:04:26

标签: php

我正在尝试使用php脚本从服务器下载一些文件,但是当我执行脚本时,它可以正常使用较少数量的文件来压缩文件,但是当我尝试使用较大的文件时执行服务器时间out以及生成的zip,因为结果不会被删除并占用服务器上的空间。 php脚本如下

if(isset($_POST['download_all']))
{ 
    $errmsg = '';
    $sql = mysqli_query($conn, "select * from img WHERE gal_id = '".base64_decode($_REQUEST['Gal'])."' And uid='".$_SESSION['uid']."' order by image1 asc");
    $url = "dataroot/Gallery/".base64_decode($_REQUEST['Gal'])."_".$_SESSION['uid']."/";
    while($res = mysqli_fetch_array($sql)){  
      $filess[] = $url.$res['image1']; 
      echo $url.$res['image1'];
    }  
$files = json_encode($filess);
$files = json_decode($files);

if(is_array($files)) {
    foreach($files as $file) {
        if(file_exists($file)) {
            $valid_files[] = $file;
        }
    }
}

if(count($valid_files > 0)){
    $zip = new ZipArchive();
    $zip_name = "total.zip";
    if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){
        $error .= "* Sorry ZIP creation failed at this time";
    }

    foreach($valid_files as $file){
        $zip->addFile($file);
    }

    $zip->close();
    if(file_exists($zip_name)){
        // force to download the zip
        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Content-Transfer-Encoding: binary");
        header("Content-length: $ size");
        header("Cache-Control: private",false);
        header('Content-type: application/zip');
        header('Content-Disposition: attachment; filename="'.$zip_name.'"');
        ob_clean();
        flush();
        readfile($zip_name);
        ignore_user_abort(true);
     //remove zip file from temp path
        unlink($zip_name);
    }

} else {
    echo "No valid files to zip";
    exit;
}

}

我更新了服务器上的内存和超时设置。问题依然存在。因此,由此形成的zip也不会被取消链接并消耗服务器上的内存。

已经提到过  Reading very large files in PHP  和 How to download multiple large files with php?

但无法解决问题。

0 个答案:

没有答案