简体   繁体   中英

Download zip file in PHP not working

Following is my code to download zip file using PHP.

function create_zip($files, $file_name, $overwrite = false) {

    foreach ($files as $imglink) {
        $img = file_get_contents($imglink);
        $destination_path = $_SERVER['DOCUMENT_ROOT'] . 'demoproject/downloads/' . time() . '.jpg';
        file_put_contents($destination_path, $img);
        $imgFiles[] = $destination_path;
    }

    if (file_exists($file_name) && !$overwrite) {
        return false;
    }
    $valid_files = array();
    if (is_array($imgFiles)) {
        foreach ($imgFiles as $file) {
            $valid_files[] = $file;
        }
    }

    if (count($valid_files)) {
        $zip = new ZipArchive();
        if ($zip->open($file_name, $overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
            echo "Sorry ZIP creation failed at this time";
        }
        foreach ($valid_files as $file) {
            $zip->addFile($file, pathinfo($file, PATHINFO_BASENAME));
        }

        $count = $zip->numFiles;
        $resultArr = array();
        $resultArr['count'] = $count;
        $resultArr['destination'] = $file_name;

        $filename = $file_name;
        $filepath = $_SERVER['DOCUMENT_ROOT'] . 'demoproject/';


        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-type: application/octet-stream");
        header("Content-Disposition: attachment; filename=\"" . $filename . "\"");
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: " . filesize($filepath . $filename));
        ob_end_flush();
        @readfile($filepath . $filename);
    } else {
        return false;
    }
}

Here the $filename and $filepath containing the name and path of zip file respectively.

Ex:

echo $filepath.$filename;

Output : D:/wamp/www/demoproject/1357198557.zip

The issue is it displaying download window but showing the folder size 0 byte . I am using windows7. See image below :

Can you try adding this, Make sure you got proper filesize

$mm_type="application/octet-stream";
header("Content-Type: " . $mm_type);
header("Content-Length: " .(string)(filesize($fullpath)) );

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM