Заголовок PHP не содержит строку запроса - PullRequest
0 голосов
/ 30 декабря 2011

У меня странная проблема. Это почти похоже на ошибку.

if ($object->error) {Form::BuildReturn(); header ("location:$url");}

Теперь, если я повторю значение $ url, я получу правильное значение: /projects/view/112/?edit-note=105

Но когда скрипт исполняется, я перехожу на /projects/view/112/.

Вот странная часть, хотя: я могу попытаться отразить или напечатать что-нибудь сразу после заголовка, и тогда я перейду к /projects/view/112/?edit-note=105, как я хочу. Пример:

if ($object->error) {Form::BuildReturn(); header ("location:$url"); echo 0;}

Я пытался искать это примерно полчаса, используя такие термины, как «строка запроса заголовка PHP», «значения заголовка PHP» и так далее. Я надеюсь, что есть какое-то реальное решение этой проблемы, вместо использования хакерского обходного пути, которое генерирует предупреждения «не может изменить информацию заголовка» ...

Ответы [ 5 ]

2 голосов
/ 30 декабря 2011

Добавить

exit(0);

после заголовка для перенаправления.

Поскольку код продолжает выполняться даже после вызова заголовка.Вам нужно явно выйти из скрипта для перенаправления.Это обсуждается более здесь .

2 голосов
/ 30 декабря 2011

Попробуйте добавить exit; после перенаправления.Это останавливает выполнение текущего файла.

1 голос
/ 30 декабря 2011

Вы должны всегда exit после передачи заголовка Location, чтобы не показывать остальную часть страницы. Кроме того, это должно исправить вашу проблему.


Кроме того, правильная форма заголовка Location будет выглядеть так:

header("Location: $url"); //Has space and capital L

Не думаю, что это будет иметь значение, может быть, только для старых браузеров?

1 голос
/ 30 декабря 2011

Правильный синтаксис:

header("Location: $url");

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

На данный момент я 'Я рекомендую выполнить некоторую низкоуровневую отладку.Используйте wget, curl, режим разработчика в вашем браузере или плагин, который будет отображать все заголовки HTTP, а затем сообщать точно, что возвращается в заголовках сервера (если результаты не позволяют вам понять это)в любом случае).

0 голосов
/ 30 декабря 2011

Вы можете использовать функцию перенаправления с метатегом. Это сохранит строку запроса

function redir($url, $time = 0) {
  echo '<meta http-equiv="refresh" content="', $time, ';URL=', $url, '">';
  die;
}
...