您好我正在我的osx-apache上处理一些php-zend框架项目。问题是,当我想使用我的php应用程序强制下载某些文件时,下载的文件已损坏,文件大小为5.4 kb!我在我的代码中尝试了很多更改,甚至使用了一些类来强制下载,但问题仍然是一样的!我应该说我在我的控制器的一个动作中使用了强制下载。重写或类似的内容是否会影响文件的下载?!
这是基本代码:
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file["files_url"]));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file["files_url"]));
ob_clean();
flush();
readfile($file["files_url"]);
exit;*/
我使用的类:BF_Download
$download = new Download($file["files_url"],$file["files_title"],"on",20);
$download->download_file();
并且:
$zip = new zip_file("../".$file["files_title"].".zip");
$zip->set_options(array('inmemory' => 1, 'recurse' => 0, 'storepaths' => 0));
$zip->add_files($file["files_url"]);
$zip->create_archive();
$zip->download_file();*/
答案 0 :(得分:4)
尝试在网页上将文件视为二进制数据。可能发生的是,一些PHP错误正在潜入输出并破坏它。
因此,请跳过内容类型标题,然后查看纯数据。
如果您还没有看到它,请保持原状并查看错误日志。
答案 1 :(得分:2)
好的,我在 dcaunt 的最后一条评论的帮助下找到了问题,实际上我只是看一下输出文件的二进制源,发现有一个很小的换行符和空格在第一行,所以通过删除它们,文件返回到它的正常状态,它变得可读。所以为了销毁这些空间,我决定在我的控制器中删除我的php脚本标签“?>”的结尾,这导致php不将它们发送到输出内容。非常感谢你的评论:)
答案 2 :(得分:0)
我强烈建议使用此Action Helper来发送文件 - 它可以从内存或磁盘上的文件发送数据,并可以轻松设置缓存和内容的选项
尽管名称为SendFile,但apache sendfile不是必需的。