1

次のコマンドでzipファイルを強制的にダウンロードするようにヘッダーを設定する小さなスクリプトがあります。

    if(ini_get('zlib.output_compression')) {
         ini_set('zlib.output_compression', 'Off');
        }
    header("Pragma: public");
    header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false);
    header("Content-Description: File Transfer");
    header("Content-type: application/octet-stream");
    header('Content-Disposition: attachment; filename="'.$mp3.'"');
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".@filesize($file));
    @readfile($file) OR die("<html>...</html>");
    exit;

ChromeとFirefoxではすべて正常に動作しますが、IE 9では失敗します。グーグルした後、これらのヘッダーを設定するさまざまな方法を試しましたが、何も役に立ちません。次に、別の小さなzipファイルを試してみましたが、うまくいきました。次に、より大きなzipファイルを試しましたが、再び失敗しました。これはサーバーまたはphp.iniなどの設定でしょうか?IEにのみ影響するのはなぜですか?

IEで失敗すると、ダウンロードしたように見えます。完了したと表示されます。ただし、ファイルは0バイトです。

助けてくれてありがとう!

4

1 に答える 1

2

ファイルが十分に大きい場合、メモリ、実行時間などに関連する問題が発生する可能性があります。

ファイルを読み取ろうとする代わりに、x-sendfile ヘッダーを使用できます。

header('x-sendfile: '.$file);

それについてのこの記事をチェックしてください: http://www.jasny.net/articles/how-i-php-x-sendfile/

于 2012-08-16T00:38:16.080 に答える