PHP强制下载返回损坏的文件

PHP强制下载返回损坏的文件,php,zend-framework,download,Php,Zend Framework,Download,嗨,我目前正在我的osx-apache上进行一些php-zend框架项目。问题是,当我想要使用php应用程序强制下载某些文件时,下载的文件已损坏,文件大小为5.4KB!我在代码中尝试了很多更改,甚至使用了一些类来强制下载,但问题仍然是一样的!我应该说我在控制器的一个动作中使用了强制下载。重写或类似的事情会影响文件的下载吗 这是基本代码: header('Content-Description: File Transfer'); header('Content-Type: applicat

嗨,我目前正在我的osx-apache上进行一些php-zend框架项目。问题是,当我想要使用php应用程序强制下载某些文件时,下载的文件已损坏,文件大小为5.4KB!我在代码中尝试了很多更改,甚至使用了一些类来强制下载,但问题仍然是一样的!我应该说我在控制器的一个动作中使用了强制下载。重写或类似的事情会影响文件的下载吗

这是基本代码:

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 = new Download($file["files_url"],$file["files_title"],"on",20);
    $download->download_file();
以及:


尝试在网页上以二进制数据的形式查看文件。可能发生的情况是,一些PHP错误正在潜入输出并破坏它

因此,跳过内容类型标题,只查看纯数据


如果您仍然看不到它,请保持联系并查看您的错误日志。

我强烈建议使用它发送文件-它可以从内存或磁盘上的文件发送数据,并且可以轻松设置缓存和内容选项


尽管名称为SendFile,但apache SendFile不是必需的。

好的,我通过dcarun的最后一条注释发现了问题,实际上我只是查看了输出文件的二进制源代码,注意到第一行有很小的换行符和空格,因此通过删除它们,文件将返回到正常状态,并变得可读。因此,为了破坏这些空间,我决定删除控制器中php脚本标记“?>”的末尾,这会导致php不将它们发送到输出内容中。谢谢大家的评论:)

似乎没有php错误,甚至二进制视图也在工作(我不知道这是否正确,但毫无疑问,这是文件的二进制视图,而不是php错误)。php和apache错误日志也没有显示任何错误。您查看过下载文件的内容吗?可能在某个地方嵌入了错误消息。感谢您的评论,我使用了帮助器,但结果是一样的!下载的文件仍然损坏!好发现!去过那里,做了那件事(而且浪费了很多时间!)
$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();*/