2016-06-08 123 views
2

我试图使用php(和ajax)创建tar档案,并且它在解压时给我这个错误:"The tar archive is corrupt"当档案大于2GB时。当档案小于2GB时一切正常。解压缩时tar档案损坏

这里是我的代码:

function download_files() { 
    set_time_limit(0); 

    ob_start(); 
    $filename = "download.tar"; 
    $path = "temp/$filename"; 

    $files = ''; 
    foreach($_GET['dfile'] as $file){ 
     $files .= "$file "; 
    } 

    $cd_dir = FCPATH.'uploads'; 
    system("cd $cd_dir && tar -cf $path $files"); 

    header("Content-Transfer-Encoding: Binary"); 
    header("Content-Length: ".filesize(FCPATH."uploads/$path")); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename="'.$filename.'"'); 

    ob_end_flush(); 
    readfile(FCPATH."uploads/$path"); 
    unlink(FCPATH."uploads/$path"); 
} 

我试图消除ob_*功能,这是无用的。

任何帮助,请:)在此先感谢。

+0

的'tar -cf $路径$文件“'...这似乎是一个系统问题而不是一个编程问题 –

+0

_“我尝试删除ob_ *函数并且它没用 - ” - 当它们没有实际输出并且只设置了标题时,输出缓冲开始时是无用的,至于这个问题,你有没有试过并打开过其中的一个在文本或十六进制编辑器中检查> 2GB文件以检查它们是否包含任何错误消息(来自PHP或命令行tar调用)? – CBroe

+0

我试过,并没有错误信息 – mihaela

回答

0

看来你有标题问题 尝试这些

header("Content-Type: application/x-gzip-compressed"); 
header("Content-Disposition: attachment; filename=$filename"); 

尝试这个

function downloadTar($filename, $path) 
{ 
    $path_file = $path."/".$filename ; 
    if(file_exists($path_file)) 
    { 
     header("Content-Type: application/x-gzip-compressed"); 
     header("Content-Disposition: attachment; filename=$filename"); 
     ob_clean(); 
     flush(); 
     readfile("$path_file"); 
     exit; 
    } 

} 
+0

我试过了,它不起作用 – mihaela

+0

尝试功能 – fKnight

+0

我得到了同样的错误:( – mihaela