Header ('location:..') не работает
(1) Я загружаю свой веб-сайт на удаленный веб-сервер.
(2) Система шаблонов сайтов настроена таким образом, что все страницы формируются путем отправки запросов с запросом URL-адреса на index.php
(3) Загрузка начальных страниц. Эта страница определяет местоположение следующей страницы, оценивая значение ее формы.
(4) Перенаправление на следующую страницу выполняется с помощью: header('location: next_page')
(5) По какой-то причине перенаправление не выполняется. Вот как выглядит код:
$error = "";
if(isset($_POST['index_choice'])){
$path_choice = isset($_POST['path']) ? $_POST['path'] : NULL;
//echo $path_choice;
//echo $page_inc;
//nothing after this
if($path_choice != null){
if($form->is_connected()){
//if($path_choice != "" || $path_choice != NULL){
if($path_choice == "new"){
//header('location: /login.php');
//header('location: page/login');
header('location: /index.php?page=login');
exit();
}
else{
//header('location: /amend.php');
//header('location: page/amend');
header('location: /index.php?page=amend');
exit();
}
//}
/**
else{
//destroy_session();
$error = "You haven't selected a path. Please choose a path";
}
*
*/
}
else{
//destroy_session();
$error = "Problems with connecting to the database";
}
}else{
//destroy_session();
$error = "You have not indicated your choice";
}
}
РЕШЕННЫЙ
Это был вопрос о том, чтобы пробел после ?>
где-то еще в коде. Это было показано мне после размещения следующих команд в верхней части кода:
error_reporting(E_ALL); ini_set('display_errors', 'On');
Я хотел бы поблагодарить всех людей, которые пытались помочь.
Ответы
Ответ 1
Похоже, вы эхо-текст в браузере перед отправкой заголовка ( "location" ).
Вы не можете отправлять контент в свой браузер перед выполнением заголовка(), так как ваше эхо приведет к отправке заголовка. Прокомментируйте эти строки и посмотрите, работает ли это:
// echo $path_choice;
// echo $page_inc;
Теперь ваш заголовок будет отправлен, и вы будете перенаправлены.
Ответ 2
добавить этот код в первый кода:
<?php
ob_start();
?>
Ответ 3
Вы можете попробовать использовать javascript для перенаправления страницы:
echo '<script>window.location = "'.$url.'";</script>';
Ответ 4
Может ли простой PHP script работать следующим образом?
<?php header('Location: /index.php?page=login'); ?>
Вы также должны убедиться, что путь кода с $path_choice != null
и $form->is_connected() === true
фактически принят, потому что ваши состояния ошибок не устанавливают HTTP-заголовки вообще.
Ответ 5
Я вижу "destroy_session()", вы используете session_start() где-то?
Убедитесь, что NO-контент (включая (cookie файлы cookie) уже отправлен.
Советы по отладке: установите error_reporting (E_ALL) (включая E_NOTICE).
Это даст вам строку, по которой отправляются заголовки.
Другие источники проблем:
- спецификация
- дополнительные строки перед включением файла
Ответ 6
Я считаю, что вам нужно проверить ваш if-stack и убедиться, что вы попадаете в каждый из ваших циклов. Поместите эхо после каждого оператора if, чтобы удостовериться, что заголовок() даже оценивается, ваш цикл пролонгирован раньше, чем вы ожидаете.
Мой подозреваемый связан с использованием null и $path_choice!= null. Вы пробовали is_null() или isset(), поскольку они были специально разработаны для проверки, является ли переменная нулевой. Кроме того, операнд! == может работать и в этом случае, но я не уверен, если PHP имеет это.
Ответ 7
Убедитесь, что перед <?php
файла php у вас нет места. Это может помочь, если вы изменили тип кодировки файла на UTS_8 без спецификации и backspace непосредственно перед <?php
и убедитесь, что у вас нет session start()
после чего-либо в файле. Это должно быть сразу после
Ответ 8
Просто попробуйте это. он будет работать
echo "<script type='text/javascript'> window.location='index.php'; </script>";
вместо header("location: index.php");
Ответ 9
Просто убедитесь, что перед вашим PHP-кодом у вас нет места, потому что это имеет значение.
Например
<?php
some code this is the correct way
?>
--------------
<?php
some code this is the incorrect way the space above matters
?>
Ответ 10
Ну, если вы все попробуете, этот пример может помочь (HTML/PHP):
<?php
header("HTTP/1.0 404 Not Found");
echo '<html>
<head>
<meta http-equiv="Refresh" content="0;url=http://www.url.com/index.php?code=404" />
</head><body></body>
</html>';
?>
Ответ 11
Убедитесь, что в начале кода не должно быть пробелов.
Например:
------whitespace----
<?php
.
.
.
. ?>
Удалите пространство из первой строки так, чтобы <?php
должно быть в первой строке.