Не удается вывести буфер после создания объекта phpexcel

Мне нужно, чтобы мой сценарий отображал что-то во время обработки. Но все, что я получаю после создания объекта 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() после эха, но ни один из них не работает.

Перепробовал здесь все также: Как сбросить вывод после каждого вызова `echo`?

Мне нужно это, чтобы создать решение COMET, и если я не могу вывести эхо сразу, нет никакого способа добиться этого.

Любые идеи о том, как заставить скрипт общаться с javascript без вывода echo во время его работы, будут приветствоваться!

0

Решение

Вообще говоря, 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);

Это будет отображать сообщение каждую новую строку, когда оно начинает читать, но вместо этого можно применить базовый принцип для других критериев

2

Другие решения

Других решений пока нет …