【问题标题】:Remote File Existance Problem远程文件存在问题
【发布时间】:2010-08-24 10:20:36
【问题描述】:

我正在创建 pdf 文档以供下载,例如有人点击了 PDF 链接,然后生成了一个 pdf,浏览器会打开带有该 pdf 文件路径的新窗口。问题是浏览器在创建后大约 40-50 秒内为该文件提供 404 NOT found 错误,但在那之后,当我刷新浏览器时,该文件存在以供查看或下载。

一个 pdf 链接是 http://images.myvouchercodes.co.uk/mvclocal/pdf/ca3b5098-9b35-7d8e.pdf,您可以在其中查看文件,但相同的 url 在创建后立即给出 404 未找到。我正在使用以下代码编写文件

      try{
            $fh = fopen($filename, "w");                        
            $contents = $this->render();   // return pdf contents in string        
            if(fwrite($fh, $contents))
            {           
                $fh = fopen($filename, "r");                    
                while(strlen(file_get_contents($filename)) !=  strlen($contents))
                { }
                echo $filename;
            }
            else
            {
                throw new Exception ("Unable to create pdf");
            }
            fclose($fh);

        }
        catch(Exception $e)
        {
            echo $e->getMessage();
        }

该调用是 ajax,它会在 pdf 完成时回显文件名,然后将此文件名附加到 url,然后我使用 window.open() 打开带有 pdf 链接的新窗口,这给了我 404 not found 错误。有谁知道为什么会出现这个错误?

【问题讨论】:

  • 当有Zend_Pdf::save ($this->save($filename)) 时为什么要fopenfwrite
  • 你能描述一下这个过程吗?单击pdf按钮导致服务器...等等。这将有助于更好地了解您的问题
  • 我单击 pdf 按钮,向服务器发送 ajax 请求,该服务器将生成 pdf 并将其存储在文件夹中。 Ajax 请求将输出 pdf 文档的路径。使用此路径,我们将打开新窗口以显示生成的 pdf。

标签: php zend-framework fwrite zend-pdf


【解决方案1】:

使用php headers在浏览器上直接输出pdf

$contents = $this->render();
header('Content-type: application/pdf');
header('Content-disposition: inline; filename=nijman.pdf');
header('Content-length: ' . strlen($contents));
echo $contents;

所以不要使用创建 pdf 代码的 url 打开新窗口。

【讨论】:

    【解决方案2】:

    首先,您需要隔离是 Zend pdf 问题还是一般网络服务器问题。尝试手动创建 1 字节的虚拟文件并检查它是否会显示相同的延迟。

    这取决于您的网络服务器配置 - 有些可能具有激进的文件系统属性缓存,因此没有通用答案,您需要检查相应的配置选项。

    【讨论】:

    • 如果我使用 fread 代替 file_get_contents 那么我得到的文件内容是可变的,但是如果我将相同的 url 带到浏览器,那么它会给出 404 未找到。还有一些其他问题,例如处理在远程服务器上写入文件的延迟等。这绝对不是 Zend_pdf 问题
    猜你喜欢
    • 1970-01-01
    • 2011-06-18
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    相关资源
    最近更新 更多