Search code examples
phpcodeigniterodbcsybase

Getting HTTP ERROR 500 when trying to get data from Sybase database using odbc


I'm setting up a former PHP project on the CodeIgniter framework and i want to get some data from a SYBASE database using ODBC.

It works fine when it isn't a lot of data but when i need to get massive data it just gives me a HTTP ERROR 500.

On my former project, where i dont use CI, i didn't get this error but i got some time_limit_error which i fixed by extending 'max_execution_time';

I have tried this on CI but it is pointless and the error i get from CI isn't specific cause it just says 'HTTP ERROR 500';

The connection is properly made, since it works when i don't need massive data, but i'm not using the CI standards for it because i was having problems with that too.

Does anyone knows why i get this error and why can i fix it?

I got this error on apache log :

[Fri Apr 12 14:49:03.573513 2019] [php7:error] [pid 11768:tid 1964] [client ::1:55425] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 35767312 bytes) in C:\\xampp\\htdocs\\CodeIgniter\\system\\core\\Output.php on line 198, referer: http://localhost/CodeIgniter/Samsic/provisoes 
[Fri Apr 12 14:49:03.574982 2019] [php7:error] [pid 11768:tid 1964] [client::1:55425] PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 35770368 bytes) in Unknown on line 0, referer: http://localhost/CodeIgniter/Samsic/provisoes

print page :

> <?php ini_set("memory_limit", "256M");  ?> <!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>

Controller:

<?php
ini_set("memory_limit", "256M");
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 index(){
        $data['form'] = 'Pagamentosform';
        $this->load->view('norm',$data);

        }
    public function content(){
        $ano = addslashes($this->input->post('anop'));
        $session_data = array('anop' => $ano);
        $this->session->set_userdata($session_data);
        $codigo = addslashes($this->session->codigo);
        $resultado=$this->Pagamentos_model->read($codigo,$ano);
        $data['form'] = 'Pagamentosform';
        $data['res'] = 'Pagamentoscontent';
        $data['resultado'] = $resultado;
        $this->load->view('norm',$data);


    }

    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);


    }

    public function grafico(){
        $data['form'] = 'Pagamentosform';
        $data['res'] = 'grafico';
        $codigo = addslashes($this->session->codigo);
        $ano = addslashes($this->session->anop);
        $grafico = $this->Pagamentos_model->grafico($ano,$codigo);
        $data['data'] = $grafico;
        $this->load->view('norm',$data);


    }   

}

Model function imprimir:

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;


    }

Solution

  • Edit

    OK, your are getting this error of memory because you are concatenating the whole table into a string variable inside and endless loop and try to output this.

    DO NOT DO THAT ON MODEL.

    From your model you should return the values to use on view directly building your view.

    You have a lot of fix in this code:

    First try

    Your probable running out of memory, as you said you're loading a lot of data.

    Try to find a best value for your needs

    ini_set("memory_limit", "256M");
    

    You need to run this before loading the data, or you could change php settings to be system-wide.