Я пытаюсь создать отчет и загрузить его. Проблема в том, что когда функция, которая генерирует файл, заканчивается readfile (), она просто загружает файл, даже если я поставлю ob_start()
до вызова функции. Поэтому я не понимаю, почему ob_start
Это не ловит Это.
Проблема должна быть здесь
Я звоню ob_start()
Затем я вызываю функцию, которая выводит файл следующим образом
header('Content-Type: application/vnd.openxmlformats-officedocument.' .
'wordprocessingml.document');
header('Content-Disposition: attachment; filename="' . $fileNameDownload . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($fileName . '.' . $this->_extension));
readfile($fileName . '.' . $this->_extension);
После предыдущего вызова функции ставлю
$content = ob_get_contents();
и 4. ob_end_clen()
Я ожидаю, что с readfile()
функция начнет запись в буфер, но вместо этого выдает файл для загрузки
Я считаю, что тот факт, что заголовки устанавливаются, а не захватываются выходным буфером, может потребовать их отмены, особенно если Content-Disposition: attachment
устанавливает ответ для принудительной загрузки.
http://www.php.net/manual/en/function.ob-start.php
Эта функция включает буферизацию вывода. Пока активна буферизация вывода, из сценария не отправляется вывод (кроме заголовков), вместо этого вывод хранится во внутреннем буфере.
Поэтому, если функция устанавливает:
header('Content-Type: application/vnd.openxmlformats-officedocument.' . 'wordprocessingml.document');
header('Content-Disposition: attachment; filename="' . $fileNameDownload . '"');
вам нужно будет отменить его после завершения захвата буферизации вывода, то есть:
header('Content-Type: text/html');
header('Content-Disposition: inline');
Других решений пока нет …