7

PHP でデータベース クエリを使用してバイナリ ファイルを取得しています。しかし、強制的にダウンロードしようとすると、header('Content-type: application/octet-stream') 行によって 0 バイトのファイルが生成されます。その行がなければ、完全なコンテンツを含むファイルをダウンロードできます。確かにバイナリファイルなので、その行が問題を引き起こす理由がわかりません。コード:

$result = mysql_query("SELECT data FROM stored_file WHERE file_name = '$q'");

while($row = mysql_fetch_array($result))
{
    $file = $row['data'];
}


    header('Content-disposition: attachment; filename='.$q);
    header('Content-type: application/octet-stream');
    header('Content-Length: '.filesize($file));
    header("Pragma: no-cache");
    header("Expires: 0");
    echo $file;

何か案が?ありがとう。

4

2 に答える 2

6

filesize()意味のある値を返しません。

最初のパラメーターとして必要な実際のファイル名ではなく、バイナリ データが$fileにあります。したがって、エラーが発生します。(error_reporting を有効にしてください! エラーが表示されないことと、エラーが表示されないことは別のことです。)

そこで使いたいのはstrlen($file)ではなくfilesize()です。

ところで、application/octet-streamまたは他のフィルインはダウンロードを強制するのに役に立ちません。Content-Disposition:その効果に最も重要なのはヘッダーです。正しい MIME タイプを送信することは引き続き許可されています。

于 2012-06-24T10:40:21.837 に答える