Ob_start не ловит выходной файл

Я пытаюсь создать отчет и загрузить его. Проблема в том, что когда функция, которая генерирует файл, заканчивается readfile (), она просто загружает файл, даже если я поставлю ob_start() до вызова функции. Поэтому я не понимаю, почему ob_start Это не ловит Это.

Проблема должна быть здесь

  1. Я звоню ob_start()

  2. Затем я вызываю функцию, которая выводит файл следующим образом

    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);

  3. После предыдущего вызова функции ставлю
    $content = ob_get_contents();

и 4. ob_end_clen()

Я ожидаю, что с readfile() функция начнет запись в буфер, но вместо этого выдает файл для загрузки

1

Решение

Я считаю, что тот факт, что заголовки устанавливаются, а не захватываются выходным буфером, может потребовать их отмены, особенно если 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');
0

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

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

По вопросам рекламы [email protected]