0

ZipArchive クラスを使用して、サーバー上にあるファイルを圧縮しています。ダウンロードした ZIP を WinRar で解凍できますが、WinZip では解凍できません。作成した ZIP を FileZilla 経由でサーバーから直接ダウンロードすると、Winzip で解凍できます。

私が使用している次のスクリプトを見てください:-

            $zip = new ZipArchive();
    //create the file and throw the error if unsuccessful
    if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE )!==TRUE) {
        exit("cannot open <$archive_file_name>\n");
    }

    //add each files of $file_name array to archive
    foreach($file_names as $files)  {

        $zip->addFile($file_path.$files,$files);    
    }

    $zip->close();

    //get the size of the archive
    $zipped_size = filesize($archive_file_name);

    //set the required headers
    header("Content-Description: File Transfer");
    //header("Content-type: application/zip");
    header("Content-type: application/octet-stream");
    header("Cache-Control: public", false);
    header("Pragma: public");
    header("Expires: 0");
    //header("Content-type: application/x-zip-compressed");
    //header("Content-Type: application/force-download");// some browsers need this
    header("Content-Disposition: attachment; filename=CV-archive.zip");
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header("Content-Transfer-Encoding: utf-8");
    header('Pragma: public');
    //header("Content-Length:". "$zipped_size");

    ob_clean(); //ob_clean and flush are required to make sure no extra line space is generated before output as it will corrupt the zip archive
    flush();
    readfile("$archive_file_name");
    unlink("$archive_file_name"); // Now delete the temp file (some servers need this option)
    foreach($file_names as $files)  {
        unlink($file_path.$files);  
}
    exit; 
4

2 に答える 2

2

<?phpダウンロード スクリプトが追加の出力を追加しています。おそらくタグの前またはタグの後に空白が?>含まれている可能性があります。またはunlink($file_path.$files);、警告を表示している可能性があります。

于 2013-05-08T14:29:49.200 に答える
0

質問は2年前ですが、別の問題による同じ動作が見つかりました。私のアーカイブ内のファイルは「\1-SOMFILENAME」の形式でした.. win rar はファイルを抽出できましたが、Windows アーカイバは抽出できませんでした。

最初の \ が次の文字をエスケープすることが判明し、Windows アーカイバはそれを処理できません。

于 2015-07-08T14:23:16.903 に答える