下载php中的zip和exe。遵循指导方针,得到奇怪的结果

下载php中的zip和exe。遵循指导方针,得到奇怪的结果,php,download,http-headers,zip,exe,Php,Download,Http Headers,Zip,Exe,我知道这方面有很多线索,但我在这里面临着特殊的问题 首先,我试图输出一个zip文件供下载。我有以下代码 $file = '/home/www/public/'.$filename; header('Content-Type: application/zip'); header("Content-Transfer-Encoding: Binary"); header('Content-disposition: attachment;

我知道这方面有很多线索,但我在这里面临着特殊的问题

首先,我试图输出一个zip文件供下载。我有以下代码

        $file = '/home/www/public/'.$filename;
        header('Content-Type: application/zip');
        header("Content-Transfer-Encoding: Binary");
        header('Content-disposition: attachment; filename='.$filename.'');
        header('Content-Length: '.filesize($file));

        echo readfile($file);
问题是,与这些头一起下载的zip已损坏。无法打开它(存档意外结束)。当我删除内容长度标题时,它并没有损坏,但用户看不到下载时间

我还想为exe文件修改相同的代码(只是将类型更改为application/octet stream),但我得到了相同的结果。文件本身肯定没问题。只是在下载的过程中,有些事情搞砸了

谢谢你的帮助

下面是我正在使用的实际代码(经过两次修改后)。我为stackoverflow简化了它,但也许其中有一些东西

        $id = post('file');
        $object = Software_Files_Model::create()->find($id);

        if ($object->software) {    
           $file = '/home/www/public'.$object->software->getPath();
           $size=$object->software->size;

           header('Content-Type: application/zip');
           header("Content-Transfer-Encoding: Binary");
           header('Content-Disposition: attachment; filename='.$object->software->name.'');
           header('Content-Length: '.$size);

           readfile($file);
           exit;
        }

再次添加,文件下载作为一个整体。如果它的重量为10兆,则所有10兆都可以下载,保留文件名和所有。我甚至可以打开zip存档并查看内容。在uzipping过程中,当消息出现时

您仅在filesize()上使用$filename,而不是在第1行的$file中定义的完整路径。

感谢您发现这一点。然而,这个错误只出现在这篇文章中。在代码中,我实际上使用了一个值,该值取自db(我使用的cms在上传时计算并保存文件大小)@belinea:这就是为什么在将示例放到站点之前,您应该首先测试它们。这确实是一项要求。以后请多保重。而且压痕看起来很奇怪。