Как расширить предел памяти php? - PullRequest
0 голосов
/ 15 апреля 2019

Мне нужна кнопка, которая при нажатии генерирует страницы, аналогичные предыдущим (там, где кнопка), и автоматически отправляет пользователя на страницу параметров печати. На этой странице есть данные из базы данных Sybase, которые я получаю через odbc.

Проблема в том, что при попытке создать страницу для печати я не могу получить страницу из-за "проблемы с нехваткой памяти".

ОШИБКА:

Неустранимая ошибка: недостаточно памяти (выделено 392167424) (попытка выделить 387973888 байт) в C: \ XAMPP \ HTDOCS \ CodeIgniter \ Samsic \ приложения \ модели \ Pagamentos_model.php по линии 83

Да, я видел большинство подобных вопросов в StackOverflow о «нехватке памяти (..) при попытке выделить (..)».

Этот отличается от других, потому что ни один из ответов на подобные вопросы не работал здесь!

Я пробовал:

ini_set('memory_limit', '-1');

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

Ничего из этого не сработало.

Я использую MVC, и это код, который я использую:

Модель:

  <?php
    ini_set('memory_limit', '-1');



        class Pagamentos_model extends CI_Model {
        public function imprimir($ano,$codigo){
                require(APPPATH.'libraries/odbc_conn.php');
                $query = odbc_exec($db, 'Select * from GP_Vw_Valores_Pagos where Ano='.$ano.' and Codigo='.$codigo.' order by CD');
                $row=odbc_fetch_array($query);
                $output= '<h1 style="text-align: center;"> Pagamentos'.$ano.' </h1>  <table class="table" style="width: 100%; margin-bottom:40px; margin-top: 15px; ">
              <thead>
                <tr style="font-size: 1em;margin-bottom: 15px;text-align: center;">
                  <th scope="col">CD</th>
                  <th scope="col">Descrição</th>
                  <th scope="col">Tipo</th>
                  <th scope="col">Janeiro</th>
                  <th scope="col">Fevereiro</th>
                  <th scope="col">Março</th>
                  <th scope="col">Abril</th>
                  <th scope="col">Maio</th>
                  <th scope="col">Junho</th>
                  <th scope="col">Julho</th>
                  <th scope="col">Agosto</th>
                  <th scope="col">Setembro</th>
                  <th scope="col">Outubro</th>
                  <th scope="col">Novembro</th>
                  <th scope="col">Dezembro</th>

                </tr> 
                </thead>';

                while($row){
                    $output .= '<tr style="text-align: center;">
                <td>' .$row["CD"].'</td>
                  <td>'.iconv("CP850", "UTF-8", $row['Descricao']).'</td>
                  <td>VI</td>
                  <td>' .number_format($row['Vl01'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Vl02'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Vl03'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Vl04'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Vl05'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Vl06'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Vl07'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Vl08'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Vl09'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Vl10'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Vl11'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Vl12'] , 2, '.', '').'</td>
                       </tr>
                       <tr style="text-align: center;">
                <td></td>
                  <td></td>
                  <td>QT</td>
                  <td>' .number_format($row['Qt01'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Qt02'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Qt03'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Qt04'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Qt05'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Qt06'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Qt07'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Qt08'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Qt09'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Qt10'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Qt11'] , 2, '.', '').'</td>
                  <td>' .number_format($row['Qt12'] , 2, '.', '').'</td>
                       </tr>  ';
                }

                return $output;


            }
        }
?>

Контроллер:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Pagamentos extends CI_Controller {

    function __construct(){
        parent::__construct();
        $this->load->model('Pagamentos_model', '', TRUE);
        $this->load->library('session');
    }


    public function imprimir(){
        $ano =  addslashes($this->session->anop);
        $codigo = addslashes($this->session->codigo);
        $resultado = $this->Pagamentos_model->imprimir($ano,$codigo);
        $data['resultado'] = $resultado;
        $this->load->view('imprimirTemplate',$data);


    }



}

Просмотр (шаблон):

<!DOCTYPE html>
<html>
<head>
    <title></title>

    <style>
    body{
        font-size: 0.9em;
    }
    .container{
        width: 100%;
        height: 100%;
    }

    @media print {
        @page { margin: 20px; }
        body { margin: 1.6cm; }
    }
    table, th, td {
        border: 1px solid black;
    </style>
</head>
<body onload="window.print()">
    <?php $this->load->view('header'); ?>
    <?= $resultado; ?>

</body>
</html>

На данный момент, я не знаю, что делать дальше, если кто-то может помочь, я буду очень признателен!

1 Ответ

1 голос
/ 15 апреля 2019

Если запрос и выборка успешны, тогда $row не будет false и while($row) будет бесконечно зацикливаться. Вы хотите удалить это:

$row=odbc_fetch_array($query); 

А затем добавьте его в свой цикл:

while($row=odbc_fetch_array($query)) {
...