私は自分のサイトのアップロードの多くを、保管のために RapidShare にオフロードしています。次に、ファイルをダウンロードしたいユーザーがアクセスすると、API を使用して RapidShare からファイルをダウンロードし、ユーザーに提供するスクリプトがあります。ファイルを提供するスクリプト内の関連コードは次のとおりです。
// Stream file to user
header('Content-Description: File Transfer');
header('Content-Disposition: attachment; filename=' . $result->name);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Content-Length: ' . $result->size);
$url = 'https://' . $host . '/cgi-bin/rsapi.cgi?sub=download';
$url .= '&login=login';
$url .= '&password=mypass';
$url .= '&fileid=' . $result->rs_fileid;
$url .= '&filename=' . $result->name;
$handle = fopen($url, 'rb');
if(!$handle) {
throw new Exception('Failed to open file handle');
}
while(!feof($handle)) {
echo fread($handle, 1024*1024);
ob_flush();
flush();
}
fclose($handle);
これは、画像を除く、テストしたすべてのファイルで正常に機能します。画像がダウンロードされると、画像が破損しています。Windows フォト ビューアーでは画像を開くことができず、Photoshop などのプログラムでも開くことができません。
奇妙なことに、.exe をダウンロードして実行すると、すべて正常に動作します。破損していません。私が知る限り、画像でのみ発生します。また、.pdf でテストしました。
さらに奇妙なことに、元の画像のファイルサイズ (2,882 バイト) と、このスクリプトでダウンロードした画像のファイルサイズを見ると、それらは同じです。両方のファイルサイズは 2,882 バイトです。しかし、画像はまだ壊れています。
これの原因と解決策は何ですか?ダウンロード時にファイルにバイナリデータを追加しているわけではありません。:/
ありがとう。
編集: 言い忘れましたが、スクリプトを使用せずに RapidShare から直接ファイルをダウンロードした場合、イメージは問題なく、破損していません。したがって、ここでスクリプトに問題があるに違いありません。