将大型HTML文件(+ -80K行)转换为pdf时遇到一些问题。 我也尝试将文件拆分成碎片,最后将它们合并。 这是为HTML和PDF做的,但即使这样,我也会收到内存耗尽的错误。
当我编写单独的pdf文件时,我会清除写入它们的对象。 但即使这样,内存也会被“已完成”的数据填满,所以我认为问题是dompdf库中的内存泄漏。
该库通过Laravel框架使用,并使用版本0.6.1,因为供应商库需要此版本。 我们已尝试将其更新到最新版本,但之后该特定库将失败。
所以我基本上有两个问题。
1:我们如何解决内存问题,因此可以毫无问题地处理大文件(或拆分文件)。而不是改变php_ini设置。
2:是否可以覆盖composer中的供应商库版本,因此我们可以安装最新版本。没有问题供应商文件也被编辑?或者有没有办法在作曲家中运行2个不同的版本,所以两者都保持正常工作?
希望有人得到了答案,花了大约2.5来寻找解决方案...但遗憾的是......没有任何有用的东西出来。
编辑; 我们正在做的事情的样本(当使用较小的文件时);
foreach($files as $file) {
$htmlFileContents = ....; // Shorten it, but contains the html.
$dompdf = new \DOMPDF();
$dompdf->set_option('chroot', storage_path('exports'));
//$dompdf->load_html_file($file); * Should use even more memory
$dompdf->set_paper('A4', 'landscape');
$dompdf->load_html($htmlFileContents);
@$dompdf->render();
\File::put($tempFile, $dompdf->output());
unset($dompdf);
}
答案 0 :(得分:0)
如果您不想更改php.ini文件中的设置,那么您可以使用let arr = [{name: "Essa", age: 25}];
console.log(arrayToCSV(arr));
更改运行时值,这将影响项目,而不是服务器上的整个php。
如果由于最大执行时间的限制,您可以使用ini_set('parametername','value');
或set_time_limit(0);
将其设置为无限制
但如果是由于记忆耗尽,请使用ini_set('max_execution_time', 0);
但请记住,如果您的脚本需要时间通过doc()或exec()/ shell_exec()函数执行外部命令,那么set_time_limit(0)将不会受到尊重。如果你是PHP< = 5.3
,那么safe_mode也必须关闭