Как я могу заставить функцию PHP перейти на определенный веб-сайт, когда она будет запущена?
Например:
<?php
//SOMETHING DONE
GOTO(http://example.com/thankyou.php);
?>
Очень хотелось бы следующего ...
<?php
//SOMETHING DONE
GOTO($url);
?>
Я хочу сделать что-то вроде этого:
<?php
//SOMETHING DONE THAT SETS $url
header('Location: $url');
?>






Если «ЧТО-ТО СДЕЛАНО» не связано с выводом через echo / print / и т. д., То:
<?php
// SOMETHING DONE
header('Location: http://stackoverflow.com');
?>
<?php
// do something here
header("Location: http://example.com/thankyou.php");
?>
<?
ob_start(); // ensures anything dumped out will be caught
// do stuff here
$url = 'http://example.com/thankyou.php'; // this can be set based on whatever
// clear out the output buffer
while (ob_get_status())
{
ob_end_clean();
}
// no redirect
header( "Location: $url" );
?>
Когда я попробовал это, я получил следующую ошибку: «Предупреждение: невозможно изменить информацию заголовка - заголовки уже отправлены (вывод начался с example.php: 1)» Вы знаете, почему это происходит?
Это означает, что вы выводите что-то до ob_start () или после блока ob_end_clean (). Буферизация вывода (функции ob_ *) заботятся о буферизации любого вывода, позволяя вам использовать его или (как в этом случае) отбросить его позже. Поместите свой код в // делать что-нибудь здесь
Обратите внимание, что это не сработает:
header('Location: $url');
Вам нужно сделать это (для расширения переменных):
header("Location: $url");
Вы всегда можете просто использовать тег для обновления страницы - или, может быть, просто перетащите необходимый javascript на страницу в конце, что вызовет перенаправление страницы. Вы даже можете добавить это в функцию загрузки, чтобы после ее завершения страница перенаправлялась
<?php
echo $htmlHeader;
while($stuff){
echo $stuff;
}
echo "<script>window.location = 'http://www.yourdomain.com'</script>";
?>
Это хорошо сработало для меня - заголовки уже были отправлены из-за большого количества событий в области CMS, это было идеально
Просто и гениально, спасибо за полезный ответ!
не забудьте поставить "кубик" после вашего вызова, чтобы перенаправление произошло до того, как остальная часть кода на странице будет запущена. а. если у вас есть функции заголовка ниже по странице, они переопределят те, которые находятся выше по коду.
b: я предполагаю, что вы не хотите, чтобы остальная часть кода на странице выполнялась, и поэтому вы в первую очередь помещаете это перенаправление [возможно].
пример:
<?php
// do something here
header("Location: http://example.com/thankyou.php");
die();
//code down here now wont get run
?>
Вот решение проблемы «заголовки уже отправлены». Предположим, вы проверяете и отправляете форму по электронной почте. Убедитесь, что php-код - это первое, что есть на вашей странице ... перед любыми тегами doctype, head и всем прочим. Затем, когда POST вернется на страницу, сначала появится php-код и не встретит проблему с уже отправленными заголовками.
Ты подтолкнул меня на это. Возможно, стоит упомянуть, что, поскольку заголовки могут быть отправлены только в том случае, если вывод не был сгенерирован, всю страницу / приложение может потребоваться обернуть в ob_start ().