2010-04-09 4 views
-1

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

+0

Если решение ниже, пожалуйста, отметьте его как ответ, иначе просьба указать часть из вашего кода, который не работал, будет рад помочь вам. – zapping

+2

Обратите внимание, что ваш вопрос не соответствует требованиям SO, чтобы быть подробным, конкретным и письменным.'используя тег заголовка' - что именно используется« тег »? 'его не работает' - какой точный результат у вас есть? –

+1

@ Шрапнель .. U r астральный Crtic ... :) –

ответ

0

Понадобится:

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

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

2

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

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

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

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

4

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

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

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

0

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

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

<?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(); 
?> 

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