ob_start崩溃的zip创建

时间:2014-08-10 12:48:24

标签: php zip ob-start

如果我打开zip文件,winrar说:“存档意外结束” 如果没有ob_start,则zip创建可以正常工作,但不能下载。死();不起作用

<?php 
            $images = glob("bilder/*.*");
            ob_start();
            for ($i=0; $i <count($images) ; $i++) {


                echo '<ul id="table"><li><a class="fancybox" rel="gallery1" href="'. $images[$i]. '"><img src="'. $images[$i].'" height="90" width="160" alt=""/></a>
                        <div><label><input id="check" type="checkbox" name="img[]" value="'.$images[$i].'"/></label></div></li></ul>';
            }

            if (isset($_POST["img"])){
            $images = $_POST["img"];
            $zip = new ZipArchive();
            $ip = gethostbyaddr($_SERVER["REMOTE_ADDR"]);
            $filename = "./".$ip.".zip";
            if ($zip->open($filename, ZipArchive::CREATE)!==TRUE) {
                exit("cannot open <$filename>\n");
            }
            for ($i=0; $i < count($images); $i++) { 
                $zip->addFile($images[$i]);
            }
            $zip->close();

            header('Content-Type: application/zip');
            header('Content-disposition: attachment; filename='.$filename);
            header('Content-Length: ' . filesize($filename));
            readfile($filename);
            die();
            }
            ob_end_flush();
            ?>
            <input type="submit" value="Download">
            </form>

1 个答案:

答案 0 :(得分:0)

在readfile之后添加die(),然后重试。没有死,你仍然打印html,这将破坏你的输出。