2012-06-29 45 views
0

PHP强制下载的另一个问题。它正在工作,然后我做了一件事,现在它没有。强制下载损坏的文件重写文件内容

这里,我们去(有,如果每种文件类型声明,我接受,但只是显示一个应该足以帮助诊断问题):

$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'); 

什么最终发生的是,它迫使文件下载使用正确的文件名和正确的扩展名。它不会触发任何类型的损坏的文件错误。但是,当我打开文件的内容丢失。如果它的文字文件将拒绝打开。如果一个文本文档文字将变为一堆PHP错误如下:


警告:ReadFile的($文件)[function.readfile]:未能打开流:没有这样的文件或目录中的线/home/myhost/public_html/wwww.mydomain.com/pagethatforceddownload.php

然后,它给出了该误差为与插头的每一行(甚至那些包含在如果不应该是m的子句eeting他们的条件:

警告:不能更改头信息 - 头已经发出在/家庭/ myhost的(输出开始/home/myhost/public_html/wwww.mydomain.com/pagethatforceddownload.php:68)在线

我真的失去了/public_html/wwww.mydomain.com/pagethatforceddownload.php。任何帮助将不胜感激。我终于使我的网站上的所有工作和BAM,我意识到,我有这个问题的巨大混乱。

回答

2

此行是错误的:

if ($ext = pdf){ 

它应该是:

if ($ext == "pdf"){ 

而且你可以添加:

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

,以确保你得到一个有效的文件。

这是不对太:

readfile('$file'); 

它应该是:

readfile($file); 
+0

由于一吨。对于什么时候使用“或者”,我总是有点困惑,对于一些基本的读法可能会有所澄清。 – user187680

+0

简单的引用,php永远不会查看字符串中是否有变量,所以'$ variable '将总是给'$变量',即使你之前声明了一个$变量。 使用双引号,php将搜索字符串中的变量并用值替换它们,“a $ variable”将变成“变量的值”。 查看http://php.net/manual/language.types.string.php了解更多信息。 –

+0

此外,如果我的答案帮助了你,请[接受它](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) –