我想在虚拟LAMP服务器上使用PHP实现PDF导出功能。用户单击指向生成带有wkhtmltopdf的PDF的PHP脚本的链接。这个PDF可能超过一千个站点,需要很多SQL查询和图像。因此,生成此PDF可能需要几分钟。
问题是,大多数浏览器会在服务器没有响应任何内容的某个时间后超时。在Firefox中,这将在300秒后默认发生。在about:config中,它由network.http.response.timeout定义。当我将值更改为100时,浏览器将在使用pdf-export后100秒后超时。解决方案是某种心跳,以避免浏览器超时。我想通过PHP flush()函数实现这种心跳,但我不能让它工作。
这是一个测试代码。它来自http://manzzup.blogspot.de/2013/11/real-time-updating-of-php-output-using.html:
// Turn off output buffering
ini_set('output_buffering', 'off');
// Turn off PHP output compression
ini_set('zlib.output_compression', false);
//Flush (send) the output buffer and turn off output buffering
while (@ob_end_flush());
// Implicitly flush the buffer(s)
ini_set('implicit_flush', true);
ob_implicit_flush(true);
echo "add this";
echo str_pad("padding: ",8000,"_");
echo "<br />";
ob_flush();
flush();
sleep(5);
echo "Program Output";
ob_flush();
flush();
这只是我测试的最后一个例子,但我是stackoverflow的新手,不能发布超过2个链接。这是另一个相关网站:
http://www.stevesouders.com/blog/2013/01/31/http-archive-adding-flush/
是否可以在所有浏览器中使用flush()函数?有人有一个使用此功能的运行站点吗?什么服务器配置可以阻止flush()函数工作?
感谢您即将推出的所有答案!
答案 0 :(得分:0)
正如您可以在此处阅读:http://nl1.php.net/flush,请避免在flush()
内使用<table>
并在每次刷新中提供换行符。您还需要禁用输出缓冲和压缩,但您已经这样做了。
不要忘记增加或禁用脚本运行所允许的时间。这需要在PHP.ini中完成(有时甚至可以在运行时完成),但Web服务器也有此设置。
修改强>
请尝试添加header( 'Content-type: text/html; charset=utf-8' );
。
答案 1 :(得分:-1)
增加脚本执行时间限制 ini_set('max_execution_time',以秒为单位的时间);