Заголовок против перенаправления контента

Как мы знаем, функция header() в PHP вызывает ошибки, если они не отправлены перед содержимым HTML, поэтому вместо использования буферизации вывода или, что еще хуже, подавления известных ошибок «заголовки уже отправлены», я думал об использовании содержимого HTML перенаправлять как альтернативу. например:

 if($userRegister){ ?> <meta http-equiv="refresh" content="0; URL=success.php" /> <?php } 

Поскольку я не видел такого подхода, я хотел бы знать, что мне что-то не хватает. Поскольку это выглядит неплохим подходом для перенаправления страниц

Solutions Collecting From Web of "Заголовок против перенаправления контента"

см.: Является ли хорошей практикой использовать теги meta refresh для перенаправления вместо функции header () в php?

оба метода имеют свои взлеты и падения.

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

Это не требуется, но я бы предложил сделать что-то вроде этого:

 if($userRegister){ ?> <script type="text/javascript">location.href="success.php";</script> <noscript><meta http-equiv="refresh" content="0; URL=success.php" /></noscript> <?php } 

Вы использовали мета-обновление в качестве альтернативы местоположению заголовка. Это правильно, но, на мой взгляд, вы должны использовать перенаправление заголовка, и если вы хотите удалить header already sent ошибку, вы должны использовать ob_start() и ob_flush() и включить вывод, буферизирующий ваш php.ini, если он выключен.

я лично использовал headers_sent вместо проверки определенной переменной, так как именно поэтому функция была создана в первую очередь

 if (headers_sent()) { echo '<meta http-equiv="refresh" content="0; URL=success.php" />' } 

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

 function redirect($target) { if (headers_sent()) { echo "<meta http-equiv=\"refresh\" content=\"0; URL={$target}\" />"; } else { header("Location: {$target}"); } exit; }