Заголовок в PHP для перенаправления страницы - PullRequest
0 голосов
/ 09 апреля 2010

Я хочу перенаправить страницу, используя тег в заголовке, но он не работает.

Ответы [ 4 ]

4 голосов
/ 09 апреля 2010

В верхней части вашей страницы добавьте следующее (перед любым html или php):

<?php
header('Location: http://stackoverflow.com/users/300204/zaf');
exit();
?>

Если это перенаправляет вас (на домашнюю страницу замечательного программиста), то вам нужно проверить, что вы не выводили никакого контента, прежде чем использовать эту функцию header (). Функция header () должна быть вызвана перед отправкой пользователю ЛЮБОГО содержимого.

2 голосов
/ 09 апреля 2010

Наиболее распространенной причиной этого является ошибка «заголовки уже отправлены». Таким образом, вам нужно решить 2 проблемы.

  1. Из-за отсутствия текста сообщения об ошибке в вашем вопросе, я могу предположить, что у вас нет этого текста. Но программисту необходимо видеть каждое сообщение об ошибке. Вы должны включить display_errors параметр on в среде разработчика или просмотреть журналы в производственной среде. Кроме того, уровень error_reporting() должен быть установлен на E_ALL.

  2. Дизайн приложения. Ваше приложение должно быть разделено на 2 части: бизнес-логика и логика представления. Первый - получение данных от пользователя, из базы данных и т. Д. Последние отображают собранные данные. Ни один байт не должен быть отправлен в браузер до запуска логической части презентации. В этом случае у вас никогда не будет такой ошибки.

Единственное исключение - это BOM - символ порядка байтов, символ, который некоторые редакторы молча помещают в ваши файлы. Просто используйте функцию «Сохранить без спецификации».

0 голосов
/ 09 апреля 2010

Как уже отмечали некоторые, вы должны выводить заголовки перед содержимым. Идеальный способ сделать это - разделить вашу бизнес-логику и логику представления на разные части, но иногда вы застреваете с устаревшим кодом, который этого не делает.

В этой ситуации могут быть полезны функции PHP output output ; используйте ob_start () и ob_end_flush () для захвата вашего вывода, а затем сбросьте его в конце. Это позволяет вашему коду использовать header () более или менее где угодно, например,

<?php

function doSomeStuff() {
  echo 'look, outputting stuff here';
  header('Location: /');
}

doSomeStuff();
?>

Приведенный выше код выдаст ошибку об уже отправленных заголовках, но будет работать следующий код.

<?php
function doSomeStuff() {
  echo 'look, outputting stuff here';
  header('Location: /');
}

ob_start();
doSomeStuff();
ob_end_flush();
?>

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

0 голосов
/ 09 апреля 2010

Вам нужно:

header('Location: http://google.com');

Это может не сработать, потому что у вас есть какой-то вывод php перед заголовком, убедитесь, что нет пустых пробелов или каких-либо символов, или ECHO, выведенных до работы заголовков. Обычно это приводит к ошибке, и вы можете найти там, где у вас есть этот дополнительный пробел, что-то вроде «Заголовки уже отправлены страницей в строке 1 в index.php»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...