我将我的很多网站上传卸载到 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 下载文件而不通过脚本,则图像很好并且没有损坏。所以这里一定是脚本出错了。