我正在使用PHP的fpdf从数据库中创建一个pdf文件,但是当我的数据库中有很多数据时,要么文件不能完全创建,只有一半出来,要么什么都不会发生,或者我得到运行时错误,我应该做什么才能创建大型PDF文件而没有错误?
大型pdf:
代码如下:
require('lib\fpdf.php');
require ('lib\pdf.php');
include ('lib\bukaDb.php');
$pdf = new PDF('P','pt','A4');
$pdf->SetFont('Arial','',8);
$pdf->AliasNbPages();
$pdf->Open();
$pdf->setY($pdf->tMargin);
for ($i=0; $i<count($var); $i++){
//Do something , show data
//$pdf->Ln(20);
}
// Finally, produce the PDF!!
$pdf->Output();而且我的表有几百行,我不能使用设置时间限制函数,还有其他建议吗?
发布于 2011-04-11 17:27:12
我们创建的PDF文件(使用fpdf)有数百个页面,没有任何问题,所以我猜是您的代码收集/显示数据导致请求超时。
当您的HTTP请求需要很长时间才能完成(超过10秒)时,可能是您的脚本花费了太多时间才能完成。
我真的认为问题出在for循环内部发生了什么。尝试创建一个简单的虚拟PDF与大约相同数量的页面。如果这样做有效,您就知道必须在for循环中搜索问题。
发布于 2011-04-11 16:36:16
您的脚本可能超时了。尝试禁用内置的时间限制:
set_time_limit(0);但是,如果你在共享主机服务器上托管你的网站或应用程序,请确保你被允许这样做。一些网络主机(包括我的)不喜欢使用大量的服务器资源来完成这样的任务。
发布于 2011-04-11 17:28:48
将脚本移到crontab并将保存的pdf设置为文件。脚本完成后,将其设置为发送电子邮件通知您该过程已完成。
作为粗略的伪代码:
require('lib\fpdf.php');
require ('lib\pdf.php');
include ('lib\bukaDb.php');
$pdf = new PDF('P','pt','A4');
$pdf->SetFont('Arial','',8);
$pdf->AliasNbPages();
$pdf->Open();
$pdf->setY($pdf->tMargin);
for ($i=0; $i<count($var); $i++){
//Do something , show data
//$pdf->Ln(20);
}
// Finally, produce the PDF!!
$savefile = "/path/to/output/dir/output.pdf";
$pdf->Output($savefile,'I');
mail('admin@example.com', 'PDF Generator', "PDF has been generated at $savefile");然后,您所要做的就是将其保存到服务器上的某个位置,并将其路径设置为crontab:
/path/to/php/cli/php /path/to/your/saved/php/pdf_generator.php请注意,您必须:
$savefile目录可通过脚本写入。https://stackoverflow.com/questions/5618656
复制相似问题