无法删除缓冲区。 没有缓冲区删除(failed to delete buffer. No buf

2019-08-08 11:02发布

我想生成Excel从下面的代码扩展.xlsx文件。 我能够下载文件非常好,但是当我用Excel表,打开它,我收到以下警告错误.. Excel无法打开文件“dindi.xlsx”,因为文件格式或文件扩展名无效。 确保文件没有损坏并且文件扩展名的文件的格式相匹配。 当我用记事本打开它,该文件有以下错误:

注意:ob_end_clean()[ref.outcontrol]:未能删除缓冲器。 没有缓冲区删除

下面是我想要做的codeof。

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



    }

Answer 1:

这错误只是告诉你,没有缓冲删除。 为了避免它只是使用:

if (ob_get_contents()) ob_end_clean();

(检查是否有一个有效的输出缓冲液)或:

if (ob_get_length()) ob_end_clean();

如通过@Venu建议(检查是否有一个在缓冲器中的非空字符串)。

你也呼吁ob_end_clean(); 两次在那里。 而这仅适用于可堆叠缓冲区。 从PHP手册:

此函数丢弃最上面的输出缓冲区的内容,并关闭该输出缓冲。

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



Answer 2:

加入这段代码。 发生在现场直播时minifyhtml处于活动状态。 可连接advagg和httprl请求。

提出的解决方法是包裹ob_clean()ob_get_length()的条件。

if(ob_get_length() > 0) {
    ob_clean();
}


Answer 3:

从PHP文档注释部分 ,信贷在scoalaweb科网茱萸:

不要使用ob_clean()ob_end_clean()以清除包含的文件生成的空白或其他有害内容的“意外”。

包含的文件不应该产生在首位不需要的内容。

如果他们这样做,你正在做的事情错了,像之后插入空白“ ?> ”(不应该有一个“ ?> ”在PHP文件结束),或其他错误谁不遵循PHP的基本语法规则 。



Answer 4:

您的代码没有ob_start,当然也没有缓冲删除。

请结算http://php.net/manual/en/function.ob-start.php



文章来源: failed to delete buffer. No buffer to delete