【问题标题】:Can't output the buffer after creating phpexcel object创建phpexcel对象后无法输出缓冲区
【发布时间】:2015-10-21 12:07:35
【问题描述】:

我需要我的脚本在处理时回显某些内容。但是我在创建 phpexcel 对象后回显的所有内容都会进入缓冲区,并且只有在脚本完成后才会回显。

有解决办法吗?

以下是部分代码:

$inputFileName = 'index.xlsx';
echo "bla<br>";
//  Read your Excel workbook
try {
    $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    echo "Hi<br>";
    //Everything before here does not go to buffer.
    $objPHPExcel = $objReader->load($inputFileName);
    //Everything after here goes to buffer and only echoes after the script has finished running
    echo "Hi<br>";
} catch (Exception $e) {
    die('Error loading file "' . pathinfo($inputFileName, PATHINFO_BASENAME) 
    . '": ' . $e->getMessage());
}
ob_implicit_flush(true);
ob_end_flush();
echo "Hi<br>";

在 echo 之后已经尝试过 ob_flush()flush(),但它们都不起作用。

这里也试过了:How to flush output after each `echo` call?

我需要它来做一个 COMET 解决方案,如果我不能马上输出回声,就没有办法实现它。

欢迎任何关于如何使脚本与 javascript 对话而不在其过程中输出回声的想法!

【问题讨论】:

    标签: php output buffer phpexcel output-buffering


    【解决方案1】:

    一般来说,PHExcel load() 方法不会产生任何输出,所以在执行时不会显示任何内容;并且没有直接的用户挂钩可用于在该过程中显示任何内容。

    但是,应该可以配置一个读取过滤器,并使用它来生成输出。

    class readOutputFilter implements PHPExcel_Reader_IReadFilter {
        $currentRow = 1;
    
        public function readCell($column, $row, $worksheetName = '') {
            if ($row != $this->currentRow) {
                $this->currentRow = $row;
                echo 'Row ', $row, PHP_EOL;
            }
            // always return true, because we want to load every cell
            return true;
        }
    }
    
    $outputFilter = new readOutputFilter();
    $objReader->setReadFilter($outputFilter);
    $objPHPExcel = $objReader->load($inputFileName);
    

    这将在每一个新行开始读取时显示一条消息,但基本原则可以应用于其他条件

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 2011-10-31
      相关资源
      最近更新 更多