从RapidShare下载时损坏的图像

时间:2012-06-13 22:05:20

标签: php image corruption 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照片查看器无法打开图像,也无法打开像Photoshop这样的程序。

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

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

这可能是什么原因和解决方案?这并不像我在下载时将任何二进制数据添加到文件中。 :/

感谢。

编辑:忘记提及,如果我直接从RapidShare下载文件而不通过脚本,图像很好并且没有损坏。所以这里的剧本必须是错误的。

2 个答案:

答案 0 :(得分:1)

检查我的answer for a similar problem,我很确定您的文件开头会有一些通知!

答案 1 :(得分:1)

简化代码,不需要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,易于使用。