【问题标题】:Force Download Corrupt File Rewritten File Content强制下载损坏文件重写文件内容
【发布时间】:2012-06-29 20:48:46
【问题描述】:

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.php68

然后它为带有标题的每一行给出此错误(即使是那些包含在不应该满足其条件的 if 子句中:

警告:无法修改标头信息 - 标头已由 /home 中的(输出开始于 /home/myhost/public_html/wwww.mydomain.com/pagethatforceddownload.php:68)发送/myhost/public_html/wwww.mydomain.com/pagethatforceddownload.php69

我真的迷路了。任何帮助将不胜感激。我终于让我的网站上的所有东西都能正常工作并且 BAM,我意识到我遇到了一个非常混乱的问题。

【问题讨论】:

    标签: php html header download mime-types


    【解决方案1】:

    这一行是错误的:

    if ($ext = pdf){
    

    应该是:

    if ($ext == "pdf"){
    

    你可以添加:

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

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

    这也是错误的:

    readfile('$file');
    

    应该是:

    readfile($file);
    

    【讨论】:

    • 非常感谢。我总是对何时使用 " 或不使用 ' 感到有些困惑。关于一些基本阅读的任何建议都会澄清。
    • 使用简单的引用,php 永远不会查看字符串中是否存在变量,因此即使您之前声明了 $variable,'a $variable' 也会始终给出 'a $variable'。使用双引号,php 将在字符串中搜索变量并用值替换它们。 “a $variable”将变成“a value_of_variable”。查看php.net/manual/language.types.string.php 了解更多信息。
    • 另外,如果我的回答对你有帮助,请accept it
    猜你喜欢
    • 1970-01-01
    • 2013-03-31
    • 2012-12-05
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    相关资源
    最近更新 更多