Перенаправление пользователя после отправки заголовков

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

Есть ли способ (используя PHP), что я могу выполнить перенаправление, чтобы перевести пользователя на другую страницу (очевидно, не используя заголовки)

Если бы вы могли указать мне какую-нибудь документацию?

Ответ 1

Решил написать мою собственную php-функцию, которая реализует перенаправление javascript. См. Код ниже.

function redirect($url)
{
    $string = '<script type="text/javascript">';
    $string .= 'window.location = "' . $url . '"';
    $string .= '</script>';

    echo $string;
}

Ответ 2

Вы можете использовать Javascript или метатег. Но если вы не хотите исправлять свой код для отображения вывода после обработки, просто включите output_buffering в файле.htaccess для сайта.

php_flag output_buffering on

Или этот (извините, не помню):

php_value output_buffering 1

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

Ответ 3

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

Первый может быть реализован путем добавления следующего в раздел <head>

<meta http-equiv="refresh" content="0; url=http://example.com/">

Для последнего может понадобиться написать что-то вроде следующего:

<script type="text/javascript">
    window.location = "http://example.com/";
</script>

Замените http://example.com/ своим целевым URL. Обратите внимание, что последнее может быть более эффективным для реализации, если некоторые данные действительно были отправлены.

Оговорка. Оба эти метода могут быть заблокированы на стороне клиента, но технически, поэтому можно перенаправить 301 и 302.

Ответ 4

Возможно, вы можете использовать выходной буфер, прежде чем принимать решение о перенаправлении страницы.

ИМХО, в противном случае существует только способ использования метаданных или метаданных JavaScript.

Ответ 5

Это функция php, которую я использую для перенаправления. Если заголовки не отправлены, используется "header (location)", иначе используется функция javascript.

 function redirect($url)
{
    $baseUri=_URL_;

    if(headers_sent())
    {
        $string = '<script type="text/javascript">';
        $string .= 'window.location = "' . $baseUri.$url . '"';
        $string .= '</script>';

        echo $string;
    }
    else
    {
    if (isset($_SERVER['HTTP_REFERER']) AND ($url == $_SERVER['HTTP_REFERER']))
        header('Location: '.$_SERVER['HTTP_REFERER']);
    else
        header('Location: '.$baseUri.$url);

    }
    exit;
}

Ответ 6

В моем случае работала ob_start

Решение Javascript выглядит так.. странно

Ответ 7

PHP doe не предлагает никакого другого способа, насколько я помню (ограничение протокола http), но вы можете сделать это с помощью javascript, но это совершенно другой процесс: с js, это содержимое страницы, которое сообщает браузеру для выполнения перенаправления, а не для сервера.