0

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

首先,我正在尝试输出一个 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 已损坏。无法打开它(存档意外结束)。当我删除 Content-length 标头时它没有损坏 - 但是,用户看不到下载时间。

我还想为 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 存档并查看内容。消息出现时是在解压过程中

4

1 回答 1

1

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

于 2013-08-21T21:14:56.687 回答