Этот сайт недоступен / код состояния 404 после установки заголовков в PHP

#php #wordpress #http-headers

#php #wordpress #http-заголовки

Вопрос:

Я хочу принудительно загрузить файл xlsx, который динамически генерируется в payments-exports.php файл.

Проблема в том, что если я устанавливаю заголовки, используя функцию header (), я получаю сообщение об ошибке «Этот сайт недоступен» со статусом 404, видимым в инструментах разработчика.

Это элемент привязки, который инициирует загрузку файла, расположенного в admin-dash.php:

 <a href="<?php echo esc_url( project_name_get_permalink( 'admin- 
dash/payments-export/' ) . $endpoint_part ); ?>" class=""><?php 
esc_html_e( 'Export to .xls', 'project_name' ); ?></a>
  

Переполнение стека payments-export.php файл (вспомогательная конечная точка admin-dash):

 // this is at the top of the file
die('test');
header('Content-Type: application/vnd.openxmlformats- 
officedocument.spreadsheetml.sheet');
header( 'Content-Description: File Transfer' );
header( 'Content-Disposition: attachment; filename="test.xlsx"' );

//die('test2');
// I cant see "test2" if I uncomment it and remove the first die function

// generate the file
....
$writer->writeToStdOut();

exit();
  

Я вижу, что тест отображается на моем экране нормально, но когда я удаляю его, я получаю

Этот сайт недоступен

Если я полностью удалю функции die () и header (), я получу сгенерированный вывод, видимый на экране, без каких-либо ошибок.

В принципе, открывается правильный файл, содержимое файла генерируется правильно, но установка заголовков останавливает выполнение скрипта и выдает ошибку.

Комментарии:

1. вам нужно повторить или распечатать данные после настройки заголовков, затем выйти ()

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

3. функция header() может быть сложной, можете ли вы попробовать удалить все лишние пробелы на внешних концах ваших вызовов заголовка in, в основном trim()

4. Спасибо, за совет, я удалил все пробелы, но, к сожалению, я все еще получаю ту же ошибку.

5. Из документации PHP : «Помните, что header() должен вызываться перед отправкой любого фактического вывода, будь то с помощью обычных HTML-тегов, пустых строк в файле или из PHP. Очень распространенной ошибкой является чтение кода с включенными или требующими функциями или другой функцией доступа к файлам, в котором перед вызовом header() выводятся пробелы или пустые строки. Та же проблема существует при использовании одного файла PHP / HTML. «. Вы проверяли каждый файл на наличие дополнительных пустых строк после ?> теги, … ?