#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. «. Вы проверяли каждый файл на наличие дополнительных пустых строк после ?> теги, … ?