failed to delete buffer. No buffer to delete

49,533

Solution 1

That error is just telling you that there was no buffer to delete. To avoid it just use:

if (ob_get_contents()) ob_end_clean();

(check if there's an active output buffer) or:

if (ob_get_length()) ob_end_clean();

(checks if there's a non empty string in the buffer) as suggested by @Venu.

also you are calling ob_end_clean(); two times there. And that only works with stackable buffers. From the PHP manual:

This function discards the contents of the topmost output buffer and turns off this output buffering.

Are you sure you don't want to just use ob_clean()?

Solution 2

Add this piece of code. Happens on live site when minifyhtml is active. Can be connected to advagg and httprl requests.

Proposed fix is to wrap ob_clean() with ob_get_length() condition.

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

Solution 3

From the PHP Documentation comment section, credit to cornel at scoalaweb dot com:

Don't use ob_clean() or ob_end_clean() to clear white-space or other unwanted content "accidentally" generated by included files.

Included files should not generate unwanted content in the first place.

If they do, you are doing something wrong, like inserting white-space after "?>" (there should not be a "?>" at the end of PHP files), or other errors who not follow the basic syntax rules of PHP.

Solution 4

Change

ob_end_clean();

with this

if (ob_get_contents()) ob_end_clean();

Solution 5

Your code doesn't have ob_start, of course there is no buffer to delete.

Please checkout http://php.net/manual/en/function.ob-start.php

Share:
49,533
H Dindi
Author by

H Dindi

BY DAY : Systems Developer at mHealth Kenya Ltd BY NIGHT : Code Machine ,book junkie ,Zombie FOR FUN : Explore the Great rift valley , Aspiring farmer , Social Entrepreneurs enthusiast.

Updated on July 09, 2022

Comments

  • H Dindi
    H Dindi almost 2 years

    I am trying to generate an excel file with the extension .xlsx from the code below. I am able to download the file very well but when I open it with excel sheet, I receive the following warning error .. Excel cannot open the file 'dindi.xlsx' because the file format or file extension is not valid. Ensure that the file is not corrupted and that the file extension matches the format of the file. When I opened it with notepad ,the file had the following error:

    Notice: ob_end_clean() [ref.outcontrol]: failed to delete buffer. No buffer to delete

    Below is the codeof what I'm trying to do.

    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);
    
    
    
        }
    
  • Venu
    Venu about 11 years
    +1; but if (ob_get_length() > 0) { ob_end_clean(); } may be this is much better
  • hypern00b
    hypern00b about 5 years
    Worked for me. Thanks.