альтернативный метод перенаправления php, который работает с выводом, предшествующим ему - PullRequest
0 голосов
/ 20 октября 2011

так, очевидно, если вы сделаете это:

<?php
echo 'something';
header("Location: http://something/");
?>

это не будет работать, потому что перед заголовком есть вывод ...

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

Ответы [ 5 ]

2 голосов
/ 20 октября 2011

нет, если вы не делаете что-то в тегах javascript или html на странице, которую выводите сами

, если предшествующий вывод является проблемой, вы также можете использовать буферизацию вывода, см. Ob_start, ob_get, чтобы обойти это

1 голос
/ 20 октября 2011

В PHP нет способов, кроме использования header() ... до отправки вывода (заголовки уже отправлены) ...

Вы можете использовать мета-обновление в HTML, значение которого установлено равным нулю секунд, или javascript.

Но я бы не стал рекомендовать javascript, так как некоторые отключат его.

1 голос
/ 20 октября 2011

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

ob_start()
....CONTENT...
ob_end_flush();
0 голосов
/ 20 октября 2011

Вы понимаете, почему это невозможно, верно?

Как только вы повторяете "что-то", вы отправляете контент клиенту, и как часть этого заголовка клиента уже отправлены.Вы не можете задним числом изменить заголовки, которые вы уже отправили, и вы не можете сделать два ответа на один HTTP-запрос.

ob_start() и ob_end_flush() будут буферизовать вывод вместо отправки его клиенту, чтопозволит вам обойти эту проблему, НО лучшее решение было бы:

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

0 голосов
/ 20 октября 2011

Вы можете использовать тег meta refresh .

...