【发布时间】:2013-04-18 08:44:01
【问题描述】:
以下代码最特殊的问题。它会向浏览器返回一个 pdf 报告。
function cart_aspdf() {
trace('cart_aspdf_in');
$file = 'order_WS000250.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $file . '"');
$file = APPPATH.'pdfcache/'.$file;
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');
trace('cart_aspdf_readfile');
@readfile($file);
trace('cart_aspdf_out');
}
opera,firefox,ie,safari中的trace输出如你所料:
- cart_aspdf_in
- cart_aspdf_readfile
- cart_aspdf_out
但是 chrome 的跟踪显示以下内容,这似乎表明该函数至少被调用了两次,如果不是三次的话。为什么会这样?
- cart_aspdf_in
- cart_aspdf_readfile
- cart_aspdf_out
- cart_aspdf_in
- cart_aspdf_readfile
- cart_aspdf_in
- cart_aspdf_readfile
- cart_aspdf_out
如果我省略了 content-type 行,但 chrome 会显示没有用的原始 pdf 数据,则不会出现问题
【问题讨论】:
-
Chrome 无法调用您的函数,但 chrome 可以重新加载调用该函数的页面。为了防止您的代码多次调用该函数,请添加退出;最后。
-
嗨,Andrey,readfile 后退出(我认为这就是你的意思)没有任何区别。该函数是通过页面上的锚点调用的,即 等。或者,我可以只输入 url,每次按 rfresh 时,我都可以看到跟踪。它在除 chrome 之外的所有浏览器中都能完美运行。我想停止它,因为目前,代码只输出一个完成的 pdf,但目的是如果 chrome 会导致它被生成两次,那么 pdf 将动态生成,这是一个非运行器。比尔
标签: php google-chrome pdf content-type