1

ダウンロード用のzipファイルをプッシュする次のコードがあります。

$filename = "ResourcePack_".time().".zip";
        $destination = $basepath."downloads/$filename";
        if($this->createdownload($files,$destination,false)){
            header("Cache-Control: public");
            header("Content-Description: File Transfer");
            header("Content-Length: ". filesize("$destination").";");
            header("Content-Disposition: attachment; filename='$filename'");
            header("Content-Type: application/octet-stream; "); 
            header("Content-Transfer-Encoding: binary");
            ob_end_flush();
            @readfile($destination);

            if(file_exists($destination)){
                unlink($destination);
            }
        }

サーバー上でファイルが作成されているのがわかるので、createdownload 関数が正常に zip ファイルを生成するように機能していることはわかっています。問題は、ファイルがダウンロード ストリームを開くのではなく、大量のゴミとしてブラウザに書き込まれていることです。ヘッダーに何か不足していますか?

編集

私が正しかった。私の問題はphpではありませんが、JQuery $.ajax呼び出しを介してこのコードを生成するphpファイルを呼び出すことが問題です。$.ajax を使用すると、Accept-Encoding 要求ヘッダーが zip ファイルと互換性のない値に自動的に設定されます。したがって、 $.ajax を使用する代わりに、単純な window.open javascript コマンドを使用して同じ php ページを呼び出すだけで、ヘッダーで問題なく動作します。

4

2 に答える 2

0

そのファイルに適切なタイプを渡してみてください。そのfileinfo MIMEタイプはhttp://www.php.net/manual/en/ref.fileinfo.phpを参照してください

header("Content-Type: $file_type");

また、オクテットストリームの後にセミコロンがあり、それを削除します

header("Content-type: application/octet-stream");
于 2012-06-29T17:35:36.127 に答える
0

@readfile の後にサイコロを置き、@ を削除して、ファイルの読み取りに関連する他のエラーがないかどうかを確認してください。

私は同じことをしているいくつかのコードを持っています、そしてこれは私のために働きます:

        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: private", false); // required for certain browsers
        header('Content-Disposition: inline; filename="' . $filename . '"');
        header('Content-type: application/zip');
        //header("Content-Transfer-Encoding: binary");
        header("Content-Length: " . filesize($destination));

        readfile($destination);
        die();
于 2012-06-29T17:49:52.247 に答える