1

我有一个在 php 中正确显示超过 30,000 个座位的查询,但我无法将其导出为 pdf。服务器不支持内存大小,我增加了最大内存限制但它仍然失败。

Fatal Error: Allowed memory size of 8388608 bytes ...

我可以这样做以免服务器最大内存饱和并导出pdf?是否可以执行每个单独的 PDF 页面,然后发送单个文件(全部 PDF)?

使用我的数据运行 pdf 的任何选项

解决方案!

我已经用这个简单的解决方案http://phptopdf.com解决了这个解决 方案是做一个中间步骤 => 在 php 中执行查询,然后显示一个按钮,该按钮运行 php 到 pdf 的转换,之前保存在 tmp 文件中的查询。

4

2 回答 2

1

我尝试了以下解决方案,效果很好!

在你的 wamp\apps\phpmyadmin3.3.9\config.inc.php 文件的第 24 行下面添加了以下代码:

$cfg['MemoryLimit']  = '128M';
And It works well;

在我的 config.inc.php 文件中插入第 19-25 行后:

/* End of servers configuration */

$cfg['DefaultLang'] = 'en-utf-8';
$cfg['ServerDefault'] = 1;
$cfg['UploadDir'] = '';
$cfg['SaveDir'] = '';
$cfg['MemoryLimit'] = '128M';

当我过去遇到类似问题时,此代码对我有用。

于 2013-05-20T08:43:28.643 回答
0

如果您的主机允许,您可以做的最简单的事情是通过创建自定义 php.ini 和设置来将 PHP memory_limit 设置得更高memory_limit = 64M。您可以通过 来检查设置是否有效phpinfo(),只需记住删除用于检查 phpinfo 的行/文件,以避免将 PHP 设置暴露给所有人。

如果这不起作用,您可以尝试微调一些性能设置。

对于 TCPDF,这些在TCPDF 性能文档下列出,我建议您应用所有设置并使用可能减少内存消耗且不影响输出的做法。例如:

  • 如果您不使用泰语,请编辑 config/tcpdf_config.php 文件并将 K_THAI_TOPCHARS 常量设置为 false;
  • 如果不需要扩展字符,编辑 config/tcpdf_config.php 文件并将默认字体设置为核心字体;
  • 默认情况下,TCPDF 启用字体子集以减小嵌入的 Unicode TTF 字体的大小,这个过程非常慢并且需要大量内存,可以使用 setFontSubsetting(false) 方法关闭;
  • 尽可能使用核心字体而不是嵌入字体;
  • 如果没有严格要求,请避免使用 HTML 语法(writeHTML 和 writeHTMLCell 方法);
  • 将大的 HTML 块分割成小块;
  • 如果没有严格要求,请避免使用事务;

您也可以逐页导出,然后在本地合并生成的 PDF 文件。

您最后的选择是请您的托管服务提供商增加 PHP memory_limit(至少是临时的),或者升级到更好的托管计划。

于 2013-05-18T06:00:41.523 回答