首页 文章

致命错误:PHPExcel中允许的内存大小为134217728个字节

提问于
浏览
1

这是完整的错误:

致命错误:第173行的/sites/apps/seller/www/application/libraries/Excel/PHPExcel/CachedObjectStorage/CacheBase.php中允许的内存大小为134217728字节(尝试分配131072字节)

这是mu代码:

public function excel_per_kategori($status = NULL){

    $user_id = $this->ion_auth->user()->row()->id;

    if($status=='out_of_stock'){
      $cek_kategori = $this->db
                            ->select('kategori.nama_kategori as nama, kategori.id')
                            ->join('kategori', 'kategori.id = produk.kategori')
                            ->where('produk.created_by', $user_id)
                            ->where('produk.stok', 0)
                            ->order_by('kategori.nama_kategori','asc')
                            ->group_by('kategori.id')
                            ->get('produk')->result()
                        ;
    }else{
                    $this->db->select('kategori.nama_kategori as nama, kategori.id');
                         $this->db->join('kategori', 'kategori.id = produk.kategori');
                        $this->db->where('produk.created_by', $user_id);
                        if($status!=NULL){
                          if($status == 3){
                            $this->db->select('produk_ditolak.created_at as tanggal_qc');
                            $this->db->join('produk_ditolak','produk.id = produk_ditolak.produk_id');
                          }
                          $this->db->where('produk.status', $status);   
                        }
                        $this->db->order_by('kategori.nama_kategori','asc');
                        $this->db->group_by('kategori.id');             
                        $cek_kategori = $this->db->get('produk')->result();
    }

    if($status == null){
        $nama_file = "semua_produk_per_kategori.xlsx";
    }elseif($status == "1"){
        $nama_file = "produk_aktif_per_kategori.xlsx";
    }elseif($status == "2"){
        $nama_file = "produk_menunggu_approval_per_kategori.xlsx";
    }elseif($status == "3"){
        $nama_file = "produk_ditolak_per_kategori.xlsx";
    }elseif($status == "0"){
        $nama_file = "produk_dihapus_per_kategori.xlsx";
    }else{
        $nama_file = "produk_stok_habis_per_kategori.xlsx";
    }

        $this->load->library("Excel/PHPExcel");

        $objPHPExcel = new PHPExcel();


$sheet_start = 0;       
foreach($cek_kategori as $ck){

        $sheet_start2 = $sheet_start++;

        $id_kategori = $ck->id;
        $nama_kategori = $ck->nama;

        if($status=='out_of_stock'){
          $produk = $this->Produk_model->out_of_stock_kategori($id_kategori)->result(); //menampilkan page stok kosong
        }else{
          $produk = $this->Produk_model->get_all_kategori($status, $id_kategori)->result();
        }

        if($status == null){
            $judul = "Semua Produk - Kategori ".$nama_kategori;
        }elseif($status == "1"){
            $judul = "Produk Aktif - Kategori ".$nama_kategori;
        }elseif($status == "2"){
            $judul = "Produk Menunggu Approval - Kategori ".$nama_kategori;
        }elseif($status == "3"){
            $judul = "Produk ditolak - Kategori ".$nama_kategori;
        }elseif($status == "0"){
            $judul = "Produk dihapus - Kategori ".$nama_kategori;
        }else{
            $judul = "Produk Stok Habis - Kategori ".$nama_kategori;
        }

        if($sheet_start2 != 0){
            $objPHPExcel->createSheet();
        }

        //header
        $objPHPExcel->setActiveSheetIndex($sheet_start2)
            ->setCellValue('A2', 'No')
            ->setCellValue('B2', 'Nama');

        //judul
        $objPHPExcel->getActiveSheet()->mergeCells('A1:AM1');
        $objPHPExcel->getActiveSheet()
            ->getStyle("A1")->getFont()->setBold(true)
            ->setName('Verdana')
            ->setSize(18);
        $objPHPExcel->setActiveSheetIndex($sheet_start2)
            ->setCellValue('A1',$judul);            

        //isi
        $nourut = 1;
        $i = 3;
        foreach ($produk as $data) {
            $objPHPExcel->setActiveSheetIndex($sheet_start2)
              ->setCellValue("A".$i, $nourut)
              ->setCellValue("B".$i, $data->nama);

          $i++;
          $nourut++;
        }

        //set title pd sheet
        if (strlen($nama_kategori)>31) {
            $nama_kategori = substr($nama_kategori, 0, 28)."...";
        }
        $objPHPExcel->getActiveSheet()->setTitle($nama_kategori);

}       

        //mulai menyimpan excel format xlsx, kalau ingin xls ganti Excel2007 menjadi Excel5
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

        //sesuaikan headernya
        ob_end_clean();
        header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
        header("Cache-Control: no-store, no-cache, must-revalidate");
        header("Cache-Control: post-check=0, pre-check=0", false);
        header("Pragma: no-cache");
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        //ubah nama file saat diunduh
        header('Content-Disposition: attachment;filename="'.$nama_file.'"');
        //unduh file
        $objWriter->save("php://output");

        //Mulai dari create object PHPExcel itu ada dokumentasi lengkapnya di PHPExcel,
        // Folder Documentation dan Example
        // untuk belajar lebih jauh mengenai PHPExcel silakan buka disitu
  }

我使用codeigniter框架和phpexcel库 . 谢谢

1 回答

  • 1

    更改内存限制 ini_set('memory_limit', '256M');

相关问题