远程文件存在问题

时间:2010-08-24 10:20:37

标签: php zend-framework fwrite zend-pdf

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

一个pdf链接是http://images.myvouchercodes.co.uk/mvclocal/pdf/ca3b5098-9b35-7d8e.pdf,您可以在其中查看文件,但相同的网址会在创建后立即找不到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找不到错误。有谁知道为什么会出现这个错误?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

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

所以不要使用create pdf code的url打开新窗口。