我正在创建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找不到错误。有谁知道为什么会出现这个错误?
答案 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打开新窗口。