Причина, по которой это не работает, заключается в том, что заголовки предшествуют контенту в HTTP-запросе. Когда вы выводите контент, PHP опережает игру, отправляя все заголовки и весь контент, обработанный до сих пор. Для отправки HTTP-запросов нет CTRL + Z, поэтому функция header()
не может добавлять заголовки после их отправки.
Однако вы можете позвонить header()
после того, как контент будет эхом, если вы используете семейство функций буферизации ob. Вызовите ob_start()
на вывод страницы в буфер, сделайте необходимые вызовы заголовков или выходы контента, и, наконец, отправьте вывод с помощью ob_end_flush()
. Ex.
<?php
ob_start(); //Start buffering
?>
<p>This is output!!!</p>
<?php
header('403 Moved Permanently'); //Fancy redirect is fancy
ob_end_flush(); //Send page content with redirect header
?>
Единственный возможный недостаток использования буферизации является то, что пользователь будет испытывать небольшое зависание в получении контента, пока команда ob_end_flush()
не называется. Скорее всего, это не будет заметно, поэтому вам не стоит беспокоиться об этом!
Прежде чем переходить ко всему этому, вы можете переместить все ваши вызовы заголовков в место до того, как содержимое будет выводиться в вашем коде. Также проверьте открывающий тег PHP для предыдущих пространств, поскольку они будут вынуждены отправлять заголовки и контент.
Вы не можете использовать 'header', если вы печатаете что угодно - что угодно - на экран. 'header' должен быть вызван перед любым выходом, если вы покажете нам свой код, возможно, мы сможем выяснить, что пошло не так; даже если у вас было место перед первым « php», это может вызвать эту проблему. –