Server環境に大きなLinuxのzip形式のアーカイブを解凍することができません:Windowsで
- LinuxのRHEL5 x86_64では、Apache、PHPを
クライアント環境:
- のWindows 10 64ビット(VirtualBoxのMacOSのホスト)、4GBのRAM、30GBの空き容量、ブラウザIE11(Edge/Firefoxでもテスト済み)、7zip
シナリオは以下の通りです:
- ジッパーはサーバ側 に到着したとき、私は、私のPHPのWebサーバにブラウザを介して(2.5ギガバイトであるアーカイブ内のファイルがある)SHA2チェックサムが一致するzipファイルをアップロード
- サーバ上でzipを解凍し、内部のファイルに基づいてXMLファイルを生成し、元のzipにXMLファイルを戻します。例:
$xml->addFromString("hello.xml", $xmldata);
- 次に、zipを閉じて、ユーザーにzipファイルをダウンロードさせます。
問題は、ダウンロードしたzipを開こうとすると、xmlを追加すると "missing"と表示され、7zipはthere are data after the payload
と報告しています。私がサーバ側で全く同じzipを解凍すれば、すべてがそこにあります... scp
私のローカルマシンへのジップ、それから私の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
とした場合チェックサムは一致しているので、転送中にジップを壊したものがあるように見えますが、これはジップ内の大きなファイルでのみ発生します。
巨大なファイルに異なる属性がある理由を教えてもらえますか。stor
他のものよりもですか?そして、私が追加したxmlには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)ことに気づいファイルはブラウザ経由でダウンロードされた後、巨大なファイルの後には失われます。
アップデート2:
[OK]を、これは非常識です...ので、私は、ブラウザを介して同じようにzip
を使用してそれを再梱包してファイルをダウンロードし、その後unzip
でLinux上で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
ファイルサイズはこの問題で本当に重要ですか?読者が作業できる100バイトのテストケースを作成します。がんばろう。 – shellter
それは問題ですが、小さなファイルで問題なく動作します。それは、転送がzipの中の巨大なファイルで行われるときはいつものように見えます。元の質問を追加情報で更新しました。 – codenamezero
申し訳ありませんが、私はこれについて手伝ってもらえないと思います。あなたのQを大幅に改善したので、私はupvotedして、それは素晴らしいパズルです。誰かを願って 'php'の達人があなたを助けることができます。うーん。あなたが示したように 'unzip -t file'を' less'で見たことはありませんでした。 'less'のバージョン#では何を得るのですか?ありがとう、幸運。 – shellter