繁体   English   中英

无法在Windows中解压缩大型Linux压缩存档

[英]Unable to unzip large Linux zipped archive in Windows

服务器环境:

  • Linux RHEL5 x86_64,Apache,PHP

客户环境:

  • Windows 10 64位元(VirtualBox MacOS主机),4GB Ram,30GB可用空间,浏览器IE11(也已通过Edge / Firefox测试),7zip

该方案如下:

  • 我通过浏览器将一个zip文件(档案中有一个2.5GB的文件)上传到我的PHP Web服务器,当zip文件到达服务器端时SHA2校验和匹配
  • 我在服务器上解压缩zip,根据其中的文件生成XML文件,然后将XML文件重新添加到原始zip中。 例如: $xml->addFromString("hello.xml", $xmldata);
  • 然后,我关闭zip并让用户下载zip文件。

问题是,当我尝试打开下载的zip时,我添加的xml是“丢失”的,7zip报告说there are data after the payload 如果我解压在服务器端完全一样的拉链,一切都在那里...如果我scp的zip我的本地计算机上,然后转移到我的Windows机器,并打开它在那里,它是罚款太...

这让我觉得,我设置的标题可能是错误的...我尝试了各种不同的方法,但是仍然无法解决...这是我拥有的最新标题...

ob_start();
header("Content-type: application/octet-stream");
header("Content-Transfer-Encoding: binary");
header('Content-Length: ' . filesize($filename));
header("Content-Disposition: attachment; filename=\"$filename\"");
while (ob_get_level()) {
   ob_end_clean();
}
readfile($filename);

我也尝试了application/zip ,它也不起作用。

更新:

所以,如果我通过浏览器(IE11)下载的zip文件的文件的校验比在服务器上生成的ZIP不同......如果我scp从服务器到本地,然后校验它的拉链,它们匹配......所以它看起来像在传输过程中有一些东西损坏了zip,但这仅在zip中的大文件才发生。

谁能告诉我,为什么是巨大的文件有不同的属性stor比其他? 为什么我添加的xml的0.0 fat0.0 fat而其他人的0.0 fat6.3

less 123456.zip
-rw-a--     6.3 fat      140 bx defN  3-Feb-16 12:22 123456/CONFIG.LDR
-rw-a--     6.3 fat      140 bx defN  8-Apr-16 10:55 123456/FILES.LUM
-rw-a--     6.3 fat      100 bx defN  3-Feb-16 12:23 123456/LOADS.LUM
-rw-a--     6.3 fat 2621440000 bx stor 16-Feb-17 15:09 123456/huge.lup
-rw-a--     6.3 fat      142 bx defN  3-Feb-16 12:23 123456/PBA123456.LUH
-rw----     0.0 fat    25196 b- defN 17-Feb-17 16:13 123456/crate.xml
6 files, 2621465718 bytes uncompressed, 2621451952 bytes compressed:  0.0%

我注意到在通过浏览器下载文件后,巨大文件之后的所有内容(例如:LUH和xml)都丢失了。

UPDATE2:

好的,这太疯狂了……所以我用unzip Linux上的zip,然后使用zip重新打包,并以相同的方式通过浏览器下载文件。 我现在正在档案中丢失其他文件……这绝对是零感觉!

解压缩并重新打包后,在下面显示了此内容,大文件之后的所有内容在Windows中均不可见。

drwxr-xr-x  2.3 unx        0 bx stor 17-Feb-17 17:03 123456/
-rw-r--r--  2.3 unx      140 bx defN  8-Apr-16 10:55 123456/FILES.LUM
-rw-r--r--  2.3 unx      142 bx defN  3-Feb-16 12:23 123456/PBA123456.LUH
-rw-r--r--  2.3 unx    25196 tx defN 17-Feb-17 16:51 123456/crate.xml
-rw-r--r--  2.3 unx 2621440000 bx defN 16-Feb-17 15:09 123456/huge.lup
-rw-r--r--  2.3 unx      100 bx defN  3-Feb-16 12:23 123456/LOADS.LUM
-rw-r--r--  2.3 unx      140 tx defN  3-Feb-16 12:22 123456/CONFIG.LDR

PHP readfile()对于大文件可能会出现问题。 尝试改用stream_copy_to_stream():

set_time_limit(0);
$stdout = fopen('php://output', 'w');
$bfname = basename($fname);

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$bfname\"");

$filein = fopen($fname, 'r');
stream_copy_to_stream($filein, $stdout);

fclose($filein);
fclose($stdout);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM