php头文件传输损坏

时间:2015-09-03 12:39:38

标签: php linux file header transfer

我在文件夹中有一些文件。我使用以下PHP代码将文件传输到浏览器(带标题)。

我以.7z格式下载正确长度的文件,但我无法解压缩。 如果我用ftp传输相同的文件,我可以解压缩它没有问题。 从我的服务器,我可以解决它没有问题。所以错误在php的某个地方

    private function pushToBrowser($file){
    if(!$file){ // file does not exist
        die('file not found');
    } else {
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=$file");
        header("Content-Type: application/zip");
        header("Content-Transfer-Encoding: binary");
        header("Content-length: ".filesize($file).";\n");

        // read the file from disk
        readfile($file);
    }
}

代码

的用法
$this->pushToBrowser($path);

2 个答案:

答案 0 :(得分:1)

致电readfile($path)之前ob_clean();& flush();

所以最后你的代码应该是这样的:

private function pushToBrowser($file){
    if(!$file){ // file does not exist
        die('file not found');
    } else {
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-Disposition: attachment; filename=$file");
        header("Content-Type: application/x-7z-compressed");
        header("Content-Transfer-Encoding: binary");
        header("Content-length: ".filesize($file).";\n");
        ob_clean();
        flush();
        // read the file from disk
        readfile($file);
    }
}

答案 1 :(得分:0)

  

要提供7个zip文件,您的内容类型应为   的 application/x-7z-compressed

如果您同时提供7拉链和拉链zip或rar文件,然后您必须以编程方式将内容类型设置为浏览器。