画像をダウンロードするといつも数バイト少なくなるのはなぜですか? 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;
だけです