强制下载损坏的文件重写文件内容

时间:2012-06-29 20:48:47

标签: php html header download mime-types

PHP强制下载的另一个问题。它工作,然后我做了一些事情,现在它没有。

我们继续(我接受的每种文件类型都有if语句,但只显示一个应该足以帮助诊断问题):

$string1 = 'home/myhost/aboveroot/reviews/';
$string2 = $username;
$string3 = '/';
$string4 = $filename;
$file= $string1.$string2.$string3.$string4;
$ext = strtolower (end(explode('.', $filename)));
//Finding MIME type
    if ($ext = pdf){
        header("Content-disposition: attachment; filename= '$filename'");
        header('Content-type: application/pdf');
        readfile('$file');

最终发生的事情是强制下载具有正确文件名和正确扩展名的文件。它不会触发任何类型的损坏文件错误。但是,当我打开文件时,内容丢失了。如果是word文档,它将拒绝打开。如果是文本文档,文本将被更改为一堆php错误,如下所示:


警告:readfile($ file)[function.readfile]:无法打开流: /home/myhost/public_html/wwww.mydomain.com/pagethatforceddownload.php中没有此类文件或目录在线 68

然后它为带有标题的每一行给出了这个错误(即使是那些不符合条件的if子句中包含的那些:

警告:无法修改标题信息 - 已经发送的标题(输出从/home/myhost/public_html/wwww.mydomain.com/pagethatforceddownload.php:68开始) / home /myhost/public_html/wwww.mydomain.com/pagethatforceddownload.php 在线 69

我真的迷路了。任何帮助将不胜感激。我终于让我的网站上的所有内容工作和BAM,我意识到即时通讯有这么大的问题。

1 个答案:

答案 0 :(得分:2)

这一行错了:

if ($ext = pdf){

应该是:

if ($ext == "pdf"){

你可以补充一下:

if($ext == "pdf" && file_exists($file)) {

确保您获得有效的文件。

这也是错的:

readfile('$file');

应该是:

readfile($file);