【问题标题】:People are downloading corrupted PDF's from my website人们正在从我的网站下载损坏的 PDF
【发布时间】:2023-03-24 02:50:01
【问题描述】:

我目前正在开发一个不是我个人开发的网站。它是基于 wordpress 的,但外部人员对其进行了很多开发。

我们遇到了一些 pdf 文件的问题。当人们下载这些 pdf 甚至图像时,它们已损坏。我调查了原因,通过用记事本打开文件,我发现网页的 html 位于文档的开头。如果我删除此 html,则 pdf 不再损坏。

我知道问题出在哪里,但我似乎找不到解决方法。这是“下载”按钮的 html 链接。

<a href="<?php echo get_bloginfo('url');?>/?download_process=<?php echo $_GET['dl'];?>" target="_blank" id="#downloadfile_atag" class="downloadfile_atag" style="display:none;">Download</a>

当我点击这个按钮时,页面被刷新,下载开始。

我在代码中发现这行代码应该是负责捕获“GET”的代码部分:

if (isset($_GET['download_process'])) { 

这个“if”中的代码有 100 多行,我没有足够的经验知道该怎么做。我需要一些关于在哪里看的建议。例如,有

ob_start();

在开头,然后

ob_clean();

在代码中间。没有正常吗

ob_end_clean(); // or
ob_end_flush();

或者类似的东西?

或者可能不是来自这个缓冲区。我应该检查什么样的指令?

或者可能不是来自那部分代码,如果是这样,我真的迷路了......

无论如何,提前感谢您的回答。

纪尧姆。

【问题讨论】:

    标签: php pdf corruption ob-start


    【解决方案1】:

    IF 语句中的header(); 有什么你没有给我们看的吗?

    如果是这样,内容大小有什么关系吗? (这是我目前正在做的事情,所以有几个想法)

    $fsize 是下载内容的大小。

    $fsize = filesize($fullPath); //this is the filename and path
    header("Content-Length: ".$fsize);  //this tells the header how big it should be.
    

    【讨论】:

    • 是的,有一些关于标题的东西。我似乎无法在评论中发布足够的字符,所以我将发布另一个答案供您查看。
    • 这里是代码(没有找到更好的方式发布它..)hpics.li/c600569
    • 我不认为这只是标题大小的问题,因为整个 html 都是在 PDF 中复制的。头、身体和页脚。会不会是因为header指令之前有指令?
    • 嗯,我说的原因是您说下载的文件已损坏,而不是他们没有下载。您是流式传输文件下载还是链接文件下载?
    • 对不起,如果我没有说清楚:人们可以下载 pdf,但是当他们尝试打开它们时,他们不能,因为它们已损坏。关于文件,链接到下载或流式传输,我该如何检查?它使用 curl,所以我认为它正在流式传输,但可能是我弄错了。我用于 pdf 下载的代码是我在之前的评论中筛选和发布的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多