代码之家  ›  专栏  ›  技术社区  ›  jerome

Laravel PHP Excel导出内存已损坏

  •  1
  • jerome  · 技术社区  · 7 年前

    因此,我在excel上导出数据时出错。

    Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 72 bytes) in /home1/greatsup/public_html/system/application/vendor/phpoffice/phpexcel/Classes/PHPExcel/Cell.php on line 889
    

    这很奇怪,因为我导出的表只包含10行。因此,我首先尝试打印它,以查看是否有任何数据正在提取,但仍然出现相同的错误。

    PS:我尝试在较大的数据集上使用excel导出。但在这个控制器中,我很难找出问题所在。

    这是我的密码

     public function excel_export(Request $request) {
    
        $post = $request->all();
        $dateFrom = $post['updated_at_from'];
        $dateTo = $post['updated_at_to'];
    
        error_reporting(E_ALL);
        ini_set('display_errors', TRUE);
        ini_set('display_startup_errors', TRUE);
        date_default_timezone_set('Asia/Manila');
        if (PHP_SAPI == 'cli')
            die('This example should only be run from a Web Browser');
        $objPHPExcel = new PHPExcel();
        $objPHPExcel = PHPExcel_IOFactory::load("templates/unit_specifications_format.xlsx");
        $objPHPExcel->getProperties()->setCreator(Config::$APPNAME)
                                     ->setLastModifiedBy(Config::$APPNAME)
                                     ->setTitle(null)
                                     ->setSubject(null)
                                     ->setDescription(null)
                                     ->setKeywords(null)
                                     ->setCategory(null);
        $fontSettings = array(
        'font'  => array(
            'bold'  => true,
            'color' => array('rgb' => 'FFFFFF'),
            'size'  => 12,
            'name'  => 'calibri'
        ));
        $headerSettings = array('fill' => array(
        'type'  => PHPExcel_Style_Fill::FILL_SOLID,
        'color' => array('rgb' => \App\Resources\Config::$PRIMARYCOLOR)
        ));
        $borderSettings = $BStyle = array(
          'borders' => array(
            'allborders' => array(
              'style' => PHPExcel_Style_Border::BORDER_THIN
            )
          )
        );
    
        $query = DB::table('unit_specifications')->get();
        print_r($query);
        exit;
    
    
        $objPHPExcel->setActiveSheetIndex(0);
        $sheet = $objPHPExcel->getActiveSheet();
    
        $start = 5;
        $row = $start;
        $column = 0;
        $no = 1;
    
    
    
    
        $allCombination = PHPExcel_Cell::stringFromColumnIndex(0).$start.':'.PHPExcel_Cell::stringFromColumnIndex($column-1).($row-1);
        $sheet->getStyle($allCombination)->applyFromArray($borderSettings);
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="'.$this->excel_filename.'"');
        header('Cache-Control: max-age=0');
        header('Cache-Control: max-age=1');
        header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
        header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
        header ('Cache-Control: cache, must-revalidate');
        header ('Pragma: public');
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save('php://output');
        exit;
    }
    

    有没有想过我错过了什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ahmed Shams    7 年前

    如果您不确定PHP内存限制设置为什么,那么错误消息中会包含它。不过,大小是以字节为单位报告的,因此我们为您进行了一些转换:

    PHP: Fatal Error: Allowed Memory Size of 8388608 Bytes Exhausted - 8 MB
    PHP: Fatal Error: Allowed Memory Size of 16777216 Bytes Exhausted - 16 MB
    PHP: Fatal Error: Allowed Memory Size of 33554432 Bytes Exhausted - 32 MB
    PHP: Fatal Error: Allowed Memory Size of 67108864 Bytes Exhausted - 64 MB
    PHP: Fatal Error: Allowed Memory Size of 134217728 Bytes Exhausted - 128 MB
    PHP: Fatal Error: Allowed Memory Size of 268435456 Bytes Exhausted - 256 MB
    PHP: Fatal Error: Allowed Memory Size of 536870912 Bytes Exhausted - 512 MB
    PHP: Fatal Error: Allowed Memory Size of 1073741824 Bytes Exhausted - 1 GB
    

    要解决此错误,请转到您的php。ini公司

    ini_set('memory_limit', '1024M'); // or you could use 1G
    

    这取决于您使用的Apache大多数都使用word

    内存\u限制

    所以搜索这个词,修改它,检查你的数据 希望这能解决你的问题