ホームページ  >  記事  >  バックエンド開発  >  画像をダウンロードするときに常に数バイトが欠落するのはなぜですか?

画像をダウンロードするときに常に数バイトが欠落するのはなぜですか?

WBOY
WBOYオリジナル
2016-06-13 12:12:48925ブラウズ

画像をダウンロードするといつも数バイト少なくなるのはなぜですか? echo "ファイルが存在しません";
return;
}

$fp=fopen($file_name,"r");

$file_size=filesize($file_name);
echo $file_size;
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes") );
header("Accept-Length: $ file_size");
header("Content-Disposition:attachment; filename=".$file_name);

$buffer=1024;
while(!feof($fp)){
$file_data = fread($fp,$buffer);

echo $file_data;
}



fclose($fp);
?> ;


-----ソリューションのアイデア-------- ---

エラーの理由:
バイナリ ファイルをテキスト モードで開きました。

この問題は、画像処理でよく発生します。$file を使用する必要があります。 = fopen($file_name,"rb");


バイナリ ファイルを操作するときに "b" フラグを指定しないと、破損したイメージ ファイルや、次のような奇妙な問題が発生する可能性があります。 rn 文字。

------解決策のアイデア----------------------

これは私がいつかやったことと似ていますさらに数バイト前ですが、ダウンロードした画像を開くことができません
次は解決策です。長い間検索した後に見つけました

// 前に出力があります (またはコードは後)、ダウンロードされたファイルにも書き込まれる可能性があるため、ダウンロード時にいくつかの余分なバイトが発生します //ダウンロードされたファイル内の余分なバイトの解決策は、 ob_start() と ob_end_clean() を使用します。 ); 前の出力をクリアします。 ob_end_clean();
//http ダウンロードに必要な応答ヘッダー
header("Content-type: application/octet-stream") //返されたファイル
header("Accept-Ranges: bytes"); //バイトサイズに応じて返す
header("Content-length: $file_size") // ファイルサイズを返す
header("Content-Disposition") :attachment; filename=".$name) ;//ここでのクライアントのポップアップ ダイアログ ボックス、対応するファイル名

-----解決策のアイデア-------- --------------

テストは OK です。コメントしたのは echo $file_size;


だけです

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。