创建phpexcel对象后无法输出缓冲区
Can't output the buffer after creating phpexcel object
我需要我的脚本在处理时回显一些东西。但是我在创建 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>";
回声后已尝试 ob_flush()
和 flush()
,但均无效。
也尝试了这里的一切:How to flush output after each `echo` call?
我需要它来做一个COMET解决方案,如果我不能马上输出回声,那是没有办法实现的。
任何关于如何使脚本与 javascript 对话而不在其过程中输出回声的想法都将受到欢迎!
一般而言,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);
这将在开始阅读时每隔一行显示一条消息,但基本原则可以应用于其他条件
我需要我的脚本在处理时回显一些东西。但是我在创建 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>";
回声后已尝试 ob_flush()
和 flush()
,但均无效。
也尝试了这里的一切:How to flush output after each `echo` call?
我需要它来做一个COMET解决方案,如果我不能马上输出回声,那是没有办法实现的。
任何关于如何使脚本与 javascript 对话而不在其过程中输出回声的想法都将受到欢迎!
一般而言,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);
这将在开始阅读时每隔一行显示一条消息,但基本原则可以应用于其他条件