заголовок ('location: ..') не работает - PullRequest
13 голосов
/ 23 августа 2010

(1) Я загружаю свой веб-сайт на удаленный веб-сервер.

(2) Система шаблонов сайта настроена таким образом, что все страницы формируются путем отправки URL-запросов в кодировке 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'); 

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

Ответы [ 11 ]

16 голосов
/ 23 августа 2010

Похоже, вы выводите текст в браузер перед отправкой заголовка ('location'). Вы не можете отправлять контент в свой браузер до выполнения header (), так как ваше эхо заставит отправлять заголовок. Прокомментируйте эти строки и посмотрите, работает ли он:

// echo $path_choice;
// echo $page_inc;

Теперь ваш заголовок будет отправлен, и вы будете перенаправлены.

13 голосов
/ 10 декабря 2012

добавить этот код к первый код:

<?php
ob_start();
?>
10 голосов
/ 15 июля 2013

Вы можете попробовать javascript способ перенаправления страницы:

echo '<script>window.location = "'.$url.'";</script>';
3 голосов
/ 23 августа 2010

Я вижу 'destroy_session ()', вы где-нибудь используете session_start ()? Убедитесь, что НИКАКОЕ содержимое (включая (сессионные) куки) уже отправлено.

Советы по отладке: установите error_reporting (E_ALL) (включая E_NOTICE). Это даст вам строку, по которой отправляются заголовки.

Другие источники проблем: - спецификация - дополнительные строки перед включенным файлом

3 голосов
/ 23 августа 2010

Работает ли простой PHP-скрипт, подобный следующему?

<?php header('Location: /index.php?page=login'); ?>

Вы также должны убедиться, что путь к коду с $path_choice != null и $form->is_connected() === true фактически взят, потому что ваши ошибки не устанавливаютсяЗаголовки HTTP вообще.

2 голосов
/ 10 июля 2016

Просто попробуйте это. это будет работать

echo "<script type='text/javascript'>  window.location='index.php'; </script>";

вместо header("location: index.php");

2 голосов
/ 07 мая 2012

Убедитесь, что перед <?php файла php у вас нет пробела. Это может помочь, если вы изменили тип кодировки файла на UTS_8 без BOM и backspace перед <?php и убедитесь, что у вас нет session start() после чего-либо в файле. Должно быть сразу после

2 голосов
/ 23 августа 2010

Полагаю, вам нужно проверить свой стек if и убедиться, что вы попадаете в каждый из ваших циклов. Размещайте эхо после каждого оператора if, чтобы удостовериться, что header () даже вычисляется, ваш цикл сокращается раньше, чем вы ожидаете.

Мой подозреваемый имеет отношение к использованию null и $ path_choice! = Null. Вы пробовали is_null () или isset (), поскольку они были специально разработаны для проверки, является ли переменная нулевой. Кроме того, операнд! == может работать и в этом случае, но я не уверен, что это не так, если в PHP это есть.

1 голос
/ 18 марта 2013

Просто убедитесь, что перед вашим php-кодом у вас нет пробела, потому что это имеет значение.

Например

<?php
some code this is the correct way
?>

--------------

<?php
some code this is the incorrect way the space above matters
?>
0 голосов
/ 20 февраля 2017

Убедитесь, что в начале кода не должно быть пробелов

Например:

------whitespace----
<?php
.
.
.
. ?>

Удалите пробел из первой строки, чтобы <?php было в первой строке.

...