8

このコードを使用して .zip ファイルをダウンロードしようとしています

<?php
    $file = "something.zip";
    $size = filesize($file);
    header('Content-type: application/octet-stream');
    header("Content-length: $size");
    header('Content-Disposition: attachment; filename="downloaded.zip"');
    readfile($file);
?>

しかし、ファイルサイズを のような数値に設定しようとしても、うまくいかないようですheader("Content-length: 567247784");。サイズが宣言されていないか、28バイトのような小さなファイルサイズのファイルしか取得しません。

この質問を見て、ポスターと同じ問題を抱えていると思いますが、彼の解決策は「サーバーに問題がありました」です。サーバー構成の問題もあると思いますが、彼の答えはまったく役に立ちません。

4

6 に答える 6

23

邪魔になる mod_deflate に関係しています。私は .htaccess をいじり、何百万もの異なることを試して一日を過ごしました。

    header('Content-Length: '.$filesize);
    header("Content-Range: 0-".($filesize-1)."/".$filesize);

PHP が 256MB 未満のメモリで構成されていることを付け加えたいと思います。

于 2015-06-01T09:25:56.427 に答える
1

最も簡単で最良の方法は次のとおりだと思います。

$head = array_change_key_case(get_headers($file, TRUE));
                    $filesize = $head['content-length'];
于 2014-03-17T12:21:46.137 に答える
0

このような場合は、末尾を削除してみてください?>。の後の改行または空白?>により、結果が変わる可能性があります。

通常、Web サーバーは Content-Length ヘッダーを自動的に設定します。

デバッグには、非常に素晴らしいhttp://fiddler2.com/を使用してヘッダーを調べたり、任意のリクエストを作成して仮定をテストしたりすることもできます。Content-Lengthコンテンツの本文がヘッダーと異なる場合、Fiddler は警告を発します。

于 2014-01-11T17:27:08.823 に答える
-1

<?php私は同じ問題を抱えていました。私の場合、タグの前に1つのエスケープ文字が含まれているphpファイルを見つけたときに解決されました。次に、返されたページが通知されたよりも大きく、$size = filesize($file);これによりエラーが発生します。

于 2014-05-08T14:22:17.447 に答える
-1

たぶんこれの問題: header("Content-length:" . $size); しかし、私は間違っている可能性があります

于 2014-01-11T17:22:30.653 に答える