[英]Unable to unzip large Linux zipped archive in Windows
服务器环境:
客户环境:
该方案如下:
$xml->addFromString("hello.xml", $xmldata);
问题是,当我尝试打开下载的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 fat
为0.0 fat
而其他人的0.0 fat
为6.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.