Ошибка «Не удается изменить информацию заголовка» при попытке перенаправления - PullRequest
0 голосов
/ 16 декабря 2010

У меня есть базовый скрипт PHP mail(), который отправляет пользователям по электронной почте детали формы, которую они только что отправили.PHP вставляет все данные в базу данных нормально, но есть проблема, когда я хочу перенаправить их после того, как данные закончили обработку.

В настоящее время я использую:

mail($email, $subject, $message, $headers);

header('Location: '/reservations/?res='.$res.'&id='.$id.'');

Ноэто выдает эту ошибку:

Warning: Cannot modify header information - headers already sent

Я понимаю, что вы не можете отправить несколько заголовков, но есть ли способ отличить заголовки почты и местоположения?Я не хочу использовать редирект JavaScript, потому что он слишком медленный и запаздывает.Я где-то читал о ob_start(), но не знаю, нужно ли это ...

Ответы [ 5 ]

4 голосов
/ 16 декабря 2010

mail () не генерирует никакого вывода. Возможно, у вас есть пробел в верхней части файла перед открывающим тегом <?php.

3 голосов
/ 16 декабря 2010

Изменение заголовка HTTP с помощью header требует, чтобы он еще не был отправлен. И это происходит, когда произошел первый вывод.

Таким образом, чтобы избежать отправки заголовка HTTP, вам нужно избегать вывода перед вызовом header или буферизировать его так, чтобы он не отправлялся (см. управление выводом , особенно * 1009). *ob_start).

Позиция, в которой произошел вывод, вызвавший отправку HTTP-заголовка, содержится в сообщении об ошибке («вывод начался в file ‍: ‍ line »).

0 голосов
/ 16 декабря 2010

Привет лучше вариант, вы можете использовать javascript window.location, чтобы вернуть страницу лайк echo 'window.location = "/ reservations /? res = $ res & id = $ id"'

0 голосов
/ 16 декабря 2010
<?php
mail($email, $subject, $message, $headers);
header('Location: '/reservations/?res='.$res.'&id='.$id.'');
?>

Должно работать нормально. Просто убедитесь, что у вас ничего не происходит до этого. Другими словами, не указывайте <body>, <title>, <head> или что-либо выше вашего кода.

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

Пример:

<?php
mail($email, $subject, $message, $headers);
header('Location: '/reservations/?res='.$res.'&id='.$id.'');
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Send mail</title>
</head>

<body>
</body>
</html> 
0 голосов
/ 16 декабря 2010

Добавьте символ "@" перед функцией почты, это решит вашу проблему.

т.е..

@mail($email, $subject, $message, $headers);
header('Location: /reservations/?res='.$res.'&id='.$id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...