晚上好。
我正在使用Yii框架和mPDF库通过Ajax脚本生成一些PDF文件,我需要在用户的浏览器中强制“另存为”对话。
我知道如何通过单个用户下载单个文件来解决此问题。 有没有人有一个提示,我怎么能让它在高负载系统上工作(例如,试图生成和下载PDF的几个用户将尝试访问一个临时文件,这将导致错误)?
我应该为每个会话生成一个单独的文件吗?哪种方式可以很好地清理这些临时文件?
感谢您的帮助。
答案 0 :(得分:1)
您应该使用tempnam
http://www.php.net/manual/en/function.tempnam.php来生成临时文件。它们将被唯一命名,因此每个会话制作一个很容易。只需在完成后正常删除。
答案 1 :(得分:1)
制作一个不可见的iframe。从JS将iframe的src设置为生成PDF的服务器上的脚本。
<iframe src="http://yoursite.com/download-file.php?report=pdf¶m1=value1¶m2=value2..." width="1" height="1"></iframe>
然后(我不确定你是怎么用mPDF做的)关键是将脚本中的文件直接输出到浏览器中。它是这样的:
<?php
$x = some_function($_GET['param1'],$_GET['param2', ...); // PDF GEN. ROUTINE, BASED ON REQUEST DATA, HOWEVER YOU DO IT
header('Content-type: application/pdf');
echo $x;
这应该解决你所有的问题。
答案 2 :(得分:1)
首先,我建议您为每个生成的PDF生成不同的临时文件,以避免任何可能的错误,例如一个用户下载其他人的PDF等。
要清理临时目录,请使用删除超过N天的所有文件的cronjob。
为了强制保存对话框&#34;,您必须将Content-disposition
标题设置为attachment
:
header('Content-Disposition: attachment; filename="myfile.pdf"');