会话处理程序类之后PHPEXCEL导出文件无法正常工作

时间:2014-04-04 06:42:42

标签: php session phpexcel

index.php包含

 .......
require_once('WABRegistry/helpers/Session_Handler.php');
session_start();
 .......

然后我使用PHPEXCEL:

$objPHPExcel->setActiveSheetIndex(0);

// Save Excel 2007 file
header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="polls_results_'.time().'.xlsx"');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->setIncludeCharts(TRUE); //First Sheet Chart
$objWriter->save('php://output');          

我可以看到以下错误消息

问题:当我尝试打开文件时,它会在mac上给我错误:

Excel cannot open this file
the file format or file extension is not valid. bla bla 

如果我评论//require_once('WABRegistry/helpers/Session_Handler.php');行,则可以正常使用

Session_Handler.php包含很多代码,如果需要,我会粘贴所有

$session = new sessionHandle();
session_set_save_handler(array(&$session,"open"),
                         array(&$session,"close"),
                         array(&$session,"read"),
                         array(&$session,"write"),
                         array(&$session,"destroy"),
                         array(&$session,"gc"));

1 个答案:

答案 0 :(得分:2)

在文本编辑器中打开Excel文件,查找任何前导或尾随空格字符,或前导BOM表头,或者yoru会话处理程序可能注入输出流的任何明显的明文错误消息

此问题的最常见原因是与输出相关的空格(可能在结束?>之后)。

使用输出缓冲,然后在调用save()之前立即丢弃缓冲区是一种常见的工作方式;但最好解决问题,而不是简单地用输出缓冲隐藏它。你会注意到没有任何PHPExcel代码有任何结束?>,以确保库本身不可能导致这个问题