Как сделать pdf с помощью mpdf с большими данными в codeigniter?

У меня были некоторые проблемы с использованием 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>

Пожалуйста, помогите мне кто-нибудь :)


person Yoga Bayu Aji Pranawa    schedule 28.10.2015    source источник
comment
Небольшая техничность. Большие данные подразумевают нечто большее, чем 200 миллионов строк. С учетом сказанного, это весь код?   -  person Andrei    schedule 28.10.2015
comment
Я имею в виду эту экстраординарную ситуацию, потому что при печати будет создано около 2000 страниц.   -  person Yoga Bayu Aji Pranawa    schedule 28.10.2015


Ответы (1)


Почему Out of memory происходит??

В 98% случаев эта ошибка возникает из-за того, что в память загружается больше, чем вы настроили PHP для обработки в одном процессе. Есть и другие причины, но они встречаются гораздо реже — очень редко это может быть утечка памяти, если вы используете PHP 5.3 и выше.


Решение

Увеличьте лимит памяти

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

Есть ли какие-либо дополнительные сведения о решениях?

  1. Если, увеличив лимит памяти, вы избавились от ошибки и ваш код теперь работает, вам необходимо принять меры для уменьшения использования памяти. Вот несколько вещей, которые вы могли бы сделать, чтобы уменьшить его:
  2. Если вы читаете файлы, прочитайте их построчно, а не считывайте файл целиком в память. Посмотрите на fgets и SplFileObject::fgets.
  3. Обновите до новой версии PHP, если вы используете PHP 5.3. PHP 5.4 и 5.5 используют намного меньше памяти.
  4. Не загружайте большие наборы данных в массив. Вместо этого перейдите к обработке меньших подмножеств большего набора данных и, при необходимости, сохраните свои данные в базе данных, чтобы уменьшить использование памяти.
  5. Попробуйте последнюю версию или дополнительную версию сторонней библиотеки (например, 1.9.3 вместо вашей 1.8.2) и используйте более стабильную версию. Иногда более новые версии библиотек написаны более эффективно.
  6. Если у вас есть нестандартное или нестабильное расширение PHP, попробуйте обновить его. Может быть утечка памяти.
  7. Если вы имеете дело с большими файлами и просто не можете прочитать их построчно, попробуйте разбить файл на несколько файлов меньшего размера и обрабатывать их по отдельности.
  8. Отключите расширения PHP, которые вам не нужны.
  9. В проблемной области отключите переменные, которые содержат большие объемы данных и которые больше не требуются в коде.
person Abdulla Nilam    schedule 28.10.2015
comment
Еще нет, все еще есть это сообщение об ошибке - person Yoga Bayu Aji Pranawa; 30.10.2015