从RapidShare下载时损坏的图像


Corrupted images when downloading from RapidShare

我将很多网站上传卸载到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 Photo Viewer无法打开图像,Photoshop等程序也无法打开图像。

奇怪的是,如果我下载一个.exe并运行它,一切正常。它没有腐败。据我所知,它只发生在图像上。我也用.pdf的测试过它。

更奇怪的是,如果我查看原始图像的文件大小(2,882 字节),然后查看通过此脚本下载的图像的文件大小,它们是相同的。两者的文件大小均为 2,882 字节。但是图像仍然损坏。

造成这种情况的原因和解决方案可能是什么?这不像我在下载文件时向文件添加任何二进制数据。:/

谢谢。

编辑:忘了提,如果我直接从RapidShare下载文件而不通过脚本,图像很好并且没有损坏。所以这里一定是剧本出了问题。

检查我的答案是否有类似的问题,我很确定在您的文件开头会有一些通知!

简化你的代码,不需要header()的东西,file_put/get_contents 更时尚:

$url = 'https://' . $host . '/cgi-bin/rsapi.cgi?sub=download';
$url .= '&login=login';
$url .= '&password=mypass';
$url .= '&fileid=' . $result->rs_fileid;
$url .= '&filename=' . $result->name;
file_put_contents($result->name, file_get_contents($url));

当你有记忆问题时,使用mod_xsendfile,使用方便。