2

重複の可能性:
PHP で ZipStream によって動的に作成された zip ファイルが OSX で開かない

PHP ZipArchive を使用して、Web サイトのユーザーがいくつかのファイルを zip ファイルに結合してダウンロードできるようにしています。私が実行している Fedora Linux コンピューターで完全に動作します。しかし、Mac ラップトップを使用してファイルをダウンロードすると、ファイルが解凍されず、ダブルクリックすると cpgz ファイルが作成されます。cpgz ファイルをダブルクリックすると、別の cpgz などが作成されます。

Google 検索を行うと、zip-cpgz ループはかなり一般的な問題のように見えますが、ほとんどすべての解決策は、元のファイルのフォーマットが不十分であることを示唆しています。存在しない初期ファイルの zip、Windows マシンによって作成された別のファイル末尾の zip などです。私のLinuxマシンでは問題なく動作するため、私の場合はそうではないと思います。

unzip を使用してターミナルで zip ファイルを開くと動作しますが、警告が表示されます

警告 [filename.zip]: zipfile の先頭または内部に 3 バイトの余分なバイトがあります (とにかく処理しようとしています)

ただし、回避できるのであれば、ユーザーに端末を使用するように指示したくありません。

ここにファイルの 1 つへのリンクがあります。私が運営している Web サイトへのリンクを提供することはできません。まだ稼働していません。このファイルには、8 つの ASCII ファイルが含まれている必要があります (火星の表面のサイトの表面温度です)。

http://eddybarratt.co.uk/wp-content/uploads/2012/06/files_run0000008.zip

4

2 に答える 2

1

PHP の ZipArchive クラスを使用する代わりに、より良い結果が得られる可能性があるのは、PCL Zip ライブラリです。PHP の ZipArchive がユーザーのホスティング アカウントで使用できない場合のフォールバックとして、カスタム ビルドの CMS で使用します。これを使用する方法の例を次に示します。

if ( class_exists('ZipArchive') ) {
    ... zip up the files with the PHP ZipArchive class...
} else {
    require_once('pclzip.lib.php');
    $pclZip = new PclZip($destination);
    $pclZip->create($files, PCLZIP_OPT_REMOVE_ALL_PATH);
    return file_exists($destination);
}

これは、ZipArchive によって作成された zip ファイルがめちゃくちゃになっている理由の質問には答えていないことを認識していますが、うまくいけば、別の方法で作業を行うことができます。

于 2012-06-04T21:29:19.783 に答える
0

どのブラウザで試しましたか?特定のブラウザー (この場合は Chrome) を介してダウンロードしたときに、圧縮ファイルが適切に解凍されないという経験がありました。Safariでファイルをダウンロードしようとしましたが、うまくいきました。これがなぜなのかはわかりませんが、別のブラウザを使用してみて、動作するかどうかを確認してください。

于 2012-06-04T23:14:45.990 に答える