使用php的压缩文件在Windows中不起作用

时间:2015-07-23 14:05:11

标签: php compression

我正在尝试使用php动态压缩一些视频文件并强制下载压缩文件。以下是我写的代码。

$files_todownload_string = ' movie1.mov movie2.mov '

header('Content-Type: application/x-gzip');
header('Content-Type: application/octet-stream');
header('Content-disposition: attachment; filename="file.zip"');
header( 'Content-Transfer-Encoding: binary' ); 

$fp = popen('zip -v - ' . $files_todownload_string, 'r');
$bufsize = 8192;
$buff = '';
while( !feof($fp) ) {
$buff = fread($fp, $bufsize);
echo $buff;
print "
";
}
pclose($fp);

完美压缩并成功下载zip文件。但是,当我尝试在Windows操作系统中打开zip文件时,它将无法打开。它说压缩文件已损坏。

有人帮忙吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

删除print " ";

您正在添加额外的字节。

答案 1 :(得分:0)

我找到了这个解决方案。压缩文件适用于所有OS Linux,Windows和Mac。

以下是代码:

$files_array = array();
$files_array[] = 'file1.mov';
$files_array[] = 'file2.mov';
$file = tempnam("tmp", "zip");
$zip = new ZipArchive();
$zip->open($file, ZipArchive::OVERWRITE);
foreach($files_array as $k => $v) {
$zip->addFile( $path.$files_available[$v] );
}
$zip->close();
header('Content-Type: application/zip');
header('Content-Length: ' . filesize($file));
header('Content-Disposition: attachment; filename="file.zip"');
header( 'Content-Transfer-Encoding: binary' ); 
ob_end_clean();
readfile($file);

感谢大家给予时间。