【问题标题】:PHP File DownloadPHP 文件下载
【发布时间】:2010-09-07 22:15:01
【问题描述】:

我目前正在构建一个脚本,允许用户通过 URL 下载文件,而无需实际看到文件名或文件的存储位置。到目前为止,我已经构建了所有内容,但我需要知道如何调用文件来打开和下载。我目前有一个工作版本(下面的代码),但由于某种原因 PHP 正在破坏下载。每次我尝试打开一个下载到我的桌​​面的文件时,我都会收到一条损坏的错误消息。当我在服务器本身上打开同一个文件时,该文件工作正常。

网址结构
http://www.example.com/download/file/cjVQv0ng0zr2

启动下载的代码

    $fullpath = BASE_PATH . '../uploads/brochures/' . $vendors['0']['filename'];

    header("Content-type: application/pdf");
    header('Content-disposition: attachment; filename="' . $fullpath . '"');

我是否做错了什么会导致文件损坏?我是否缺少一两个标题?

提前致谢, 杰克

【问题讨论】:

    标签: php file http-headers header header-files


    【解决方案1】:

    发送标头后需要调用以下行。

    readfile($fullpath); 
    

    并且还像这样在标题中进行调整:

    header('Content-disposition: attachment; filename="' . basename($fullpath) . '"');
    

    我不确定的一件事是 $fullpath .. 尝试查看您拥有的 $fullpath 是否正确并且您实际上可以访问文件,这需要是文件的完整物理路径。

    我认为添加以下标题也是一个好主意:

    header("Content-Transfer-Encoding: binary"); 
    

    【讨论】:

    • 感谢您这么快回复。我已经更改了脚本以包含您提到的内容,但我仍然收到以下错误:打开此文档时出错。文件已损坏,无法修复。
    • 只是为了确保你的物理路径是正确的,只需将代码包裹在 if(is_file($fullpath)){}
    • 我看到你说的文件路径,我会检查并确定,但上次检查时,我相信它是正确的。
    • 我在答案中还放了另一个标题行,下载文件的文件大小是多少?
    • 好的,我添加了另一个标题,但仍然是同样的问题。此外,我检查以确保路径正确并执行了 if(is_file($fullpath)) 并且仍然是同样的问题。 PDF的文件大小约为。 25.2 KB(非常小)
    【解决方案2】:

    不久前我遇到了类似的问题。确保您的脚本文件中没有任何多余的空格,无论是在"<?php" 标记之前还是"?>" 标记之后。在我的例子中,我脚本的最后一个字符是 "\n",而不是预期的 ">"

    【讨论】:

      【解决方案3】:

      我曾经遇到过同样的问题,以下为我工作;放个

      while( @ob_end_clean() );
      

      就在标题函数之前:

      header("Content-Type: ". $row['p_mime']);
      header("Content-Length: ". $row['p_size']);
      header("Content-Disposition: inline; filename=".$row["p_name"]);
      

      Content-disposition:附件/内联需根据情况设置(1.提示下载/2.在浏览器中打开)

      注意:请注意不要在标头函数之前回显和重视,并且过于谨慎不会造成任何伤害,在您认为会失败的标头函数之前将所有函数静音或产生前缀为“@”的警告消息" 标记那些 php 代码行。

      一切顺利:)

      【讨论】:

      • 刚刚尝试了这个解决方案,它对我来说非常有效。谢谢。
      【解决方案4】:

      确保退出...

      (我正在使用 blob)

      header("Content-Type: " . $response['content_type'] );
      header("Cache-Control:  maxage=1");
      header("Pragma: public"); //fixes ie bug
      echo trim($_data);
      exit();     
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-01
        • 2023-04-10
        • 1970-01-01
        • 2014-04-05
        • 2020-01-13
        • 2016-11-20
        • 2023-04-04
        • 2013-03-31
        相关资源
        最近更新 更多