无法删除缓冲区.没有要删除的缓冲区

H D*_*ndi 32 php codeigniter phpexcel

我正在尝试从下面的代码生成扩展名为.xlsx的excel文件.我能够很好地下载文件但是当我用excel表打开它时,我收到以下警告错误.Excel无法打开文件'dindi.xlsx',因为文件格式或文件扩展名无效.确保文件未损坏且文件扩展名与文件格式匹配.当我用记事本打开它时,该文件出现以下错误:

注意:ob_end_clean()[ref.outcontrol]:无法删除缓冲区.没有要删除的缓冲区

以下是我正在尝试做的代码.

public function exportResults() {

        $this -> load -> database();
        $query = $this -> db -> query("
        SELECT * FROM farm LIMIT 10");
        $results = $query -> result_array();
        $objPHPExcel = new Excel();





        $objReader = PHPExcel_IOFactory::createReader('Excel2007');
        $objPHPExcel = $objReader->load('./files/farmdetails.xlsx');


        $objPHPExcel ->getActiveSheet()->setTitle('farmreport');

        $objPHPExcel -> setActiveSheetIndex(0);
        $i = 1;
        foreach ($results as $result) {

            $objPHPExcel -> getActiveSheet() -> SetCellValue('A' . $i, $result["name"]);
            $objPHPExcel -> getActiveSheet() -> SetCellValue('B' . $i, $result["dateofcontract"]);
            $objPHPExcel -> getActiveSheet() -> SetCellValue('C' . $i, $result["leasorname"]);
            $objPHPExcel -> getActiveSheet() -> SetCellValue('D' . $i, $result["acre"]);
            $objPHPExcel -> getActiveSheet() -> SetCellValue('E' . $i, $result["zone"]);

            $i++;
            echo $result["name"];
            }



        ob_end_clean();
        $filename = "dindi.xlsx";
        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');
        header('Content-Disposition: attachment;filename=' . $filename);

        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');

        ob_end_clean();

        $objWriter -> save('php://output');

        $objPHPExcel -> disconnectWorksheets();
        unset($objPHPExcel);



    }
Run Code Online (Sandbox Code Playgroud)

Sho*_*hoe 68

该错误只是告诉您没有要删除的缓冲区.为了避免它只是使用:

if (ob_get_contents()) ob_end_clean();
Run Code Online (Sandbox Code Playgroud)

(检查是否有活动输出缓冲区)或:

if (ob_get_length()) ob_end_clean();
Run Code Online (Sandbox Code Playgroud)

(按照@Venu的建议检查缓冲区中是否存在非空字符串).

你也在ob_end_clean();那里打了两次电话.这只适用于可堆叠缓冲区.从PHP手册:

此函数丢弃最顶层输出缓冲区的内容并 关闭此输出缓冲.

你确定你不想只使用ob_clean()吗?

  • +1; 但是if(ob_get_length()> 0){ob_end_clean(); 可能这会好得多 (7认同)

Sun*_*nar 8

添加这段代码。当minifyhtml处于活动状态时,会在实时网站上发生。可以连接到advagg和httprl请求。

建议解决办法是换ob_clean()ob_get_length()条件。

if(ob_get_length() > 0) {
    ob_clean();
}
Run Code Online (Sandbox Code Playgroud)