【问题标题】:How to make pdf using mpdf that have big data in codeigniter?如何使用在codeigniter中有大数据的mpdf制作pdf?
【发布时间】:2016-01-28 00:15:38
【问题描述】:

我在使用 mpdf 处理大量数据时遇到了一些问题。

我使用 Codeigniter 作为后端框架,数据库是 SQL Server

我已将内存限制设置为 -1 =====> ini_set('memory_limit', -1); 当我有一个小数据时它可以工作,例如100 行。

但是,现在我有 1000 行,我得到了这个错误

Fatal error: Out of memory (allocated 823394304) (tried to allocate 230352 bytes) in C:\xampp\htdocs\simas\application\third_party\mpdf\mpdf.php on line 14487

我的代码有什么问题?或者如何修复这个 mpdf?

模型中的查询:

SELECT t.tgl_buku as tglbuku, t.kd_brg as kdbarang, b.namabarang, t.no_aset as qty, t.jns_trn, t.rph_aset as jumlah,t.asal_perlh as asal, t.merk_type as merk, t.keterangan, t.no_bukti as nobukti FROM as_transaksi t join ms_barang b on t.kd_brg = b.kdbarang WHERE t.jns_trn like '1%' and year(t.tgl_buku) = '2013' and month(t.tgl_buku) <= 6

视图中的表:

<table width="100%">
            <thead>
                <tr style="background:#C0C0FF; text-align:center;">
                    <center>
                    <td>Tgl Buku</td>
                    <td>Kd Barang</td>
                    <td>Nama Barang</td>
                    <td>Qty</td>
                    <td>Nilai</td>
                    <td>Supplier</td>
                    <td>Merk</td>
                    <td>Keterangan</td>
                    </center>
                </tr>
            </thead>
            <?php
            if (!empty($isdata)) {
                $total=0;
                foreach ($isdata as $row) {
                    $total=$total+($row->jumlah*$row->qty);
                    echo "<tr>";
                    echo "<td>". date('d-m-Y',strtotime($row->tglbuku))."</div></td>";
                    echo "<td>".$row->kdbarang."</div></td>";
                    echo '<td>'.$row->namabarang."</td>";
                    echo "<td>".$row->qty."</div></td>";
                    echo "<td>".$row->jumlah."</div></td>";
                    echo '<td>'.$row->asal."</td>";
                    echo '<td>'.$row->merk."</td>";
                    echo '<td>'.$row->keterangan."</td>";
                    echo '</tr>';
                }
            }else{
                echo "<tr>";
                echo "<td></td>";
                echo "<td></td>";
                echo "<td></td>";
                echo "<td></td>";
                echo "<td></td>";
                echo "<td></td>";
                echo "<td></td>";
                echo "<td></td>";
                echo "</tr>";
            }
            ?>
            <tr>
                <td></td>
                <td colspan="3">Total</td>
                <td><div align="right"><b><?=convertrp($total);?></b></div></td>
                <td></td>
                <td></td>
                <td></td>
            </tr>
        </table>

请有人帮助我:)

【问题讨论】:

  • “小”技术性。大数据意味着超过 2 亿行。话虽如此,这就是全部代码吗?
  • 我的意思是对于这种特殊情况,因为如果打印出来,它将创建大约 2000 页。

标签: php sql codeigniter web mpdf


【解决方案1】:

为什么会出现Out of memory??

98% 的情况下,此错误来自加载到内存中的内容多于您设置 PHP 在一个进程中处理的内容。还有其他原因,但这些都不太常见——如果您使用的是 PHP 5.3 及更高版本,则很少会发生内存泄漏。


解决方案

增加你的内存限制

ini_set('memory_limit','16M');

有任何关于解决方案的更多信息吗?

  1. 如果通过增加内存限制您已经摆脱了错误 并且您的代码现在可以工作,您需要采取措施减少 那个内存使用。以下是您可以采取的一些措施来减少 它:
  2. 如果您正在阅读文件,逐行阅读而不是阅读 将完整的文件放入内存中。看看 fgets 和 SplFileObject::fgets.
  3. 如果您使用的是 PHP 5.3,请升级到 PHP 的新版本PHP 5.4 和 5.5 使用更少的内存
  4. 避免将大型数据集加载到数组中。相反,去 处理较大数据集的较小子集,如有必要, 将数据保存到数据库中以减少内存使用。
  5. 试用第三方库的最新版本或次要版本 (例如,1.9.3 与您的 1.8.2)并使用更多 稳定的。有时更新版本的库写得更多 高效。
  6. 如果您有一个不常见或不稳定的 PHP 扩展,请尝试升级它。 它可能存在内存泄漏。
  7. 如果您正在处理大文件而您根本无法阅读 逐行,尝试将文件分成许多较小的文件和 单独处理。
  8. 禁用不需要的 PHP 扩展
  9. 在问题区域中,未设置包含大量 数据,在后面的代码中不需要。

【讨论】:

  • 还没有,还有这个错误信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多