web-dev-qa-db-fra.com

l'en-tête ('location: ..') ne fonctionne pas

(1) Je suis en train de télécharger mon site Web sur un serveur Web distant. 

(2) Le système de gabarits du site est configuré de manière à ce que toutes les pages soient formées en envoyant des demandes get codées en url à index.php.

(3) Le chargement de la page initiale fonctionne. Cette page détermine l'emplacement de la page suivante en évaluant la valeur de son formulaire.

(4) La redirection vers la page suivante s’effectue de la manière suivante: header('location: next_page')

(5) Pour une raison quelconque, la redirection n'est pas effectuée. Voici à quoi ressemble le code:

$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";
    }

}

RÉSOLU 

Il s'agissait simplement de laisser un espace après le ?> ailleurs dans le code. Cela m’a été révélé après avoir placé les commandes suivantes en haut du code: 

 error_reporting(E_ALL); ini_set('display_errors', 'On'); 

J'aimerais remercier toutes les personnes qui ont essayé d'aider.

13
Fortisimo

On dirait que vous renvoyez du texte au navigateur avant d'envoyer l'en-tête ("emplacement"). Vous ne pouvez pas envoyer de contenu à votre navigateur avant d’exécuter un en-tête (), car votre écho forcera l’envoi d’un en-tête. Commentez ces lignes et voyez si cela fonctionne: 

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

Maintenant, votre en-tête sera envoyé et vous serez redirigé.

16
Karst Lok

ajoute ce code à premier du code:

<?php
ob_start();
?>
13
Erfan Safarpoor

Vous pouvez essayer la méthode javascript pour rediriger la page:

echo '<script>window.location = "'.$url.'";</script>';
10
shasi kanth

Est-ce qu'un script PHP simple comme celui-ci fonctionne?

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

Vous devez également vous assurer que le chemin du code avec $path_choice != null et $form->is_connected() === true est réellement pris, car vos états d'erreur ne définissent pas du tout les en-têtes HTTP.

3
joschi

Je vois un 'destroy_session ()', utilisez-vous session_start () quelque part? Assurez-vous qu'aucun contenu (y compris les cookies (de session)) n'est déjà envoyé.

Astuces pour le débogage: set error_reporting (E_ALL) (y compris E_NOTICE) . Cela vous donnera la ligne sur laquelle les en-têtes sont envoyés.

Autres sources de problèmes: - BOM - lignes supplémentaires avant dans un fichier inclus

3
Lekensteyn

Je crois que vous devez vérifier votre if-stack et vous assurer que vous entrez dans chacune de vos boucles. Placez un écho après chaque instruction if pour vous assurer que l'en-tête () est même en cours d'évaluation, votre boucle sera coupée plus tôt que prévu.

Mon suspect est lié à l'utilisation de null et de $ path_choice! = Null. Avez-vous essayé is_null () ou isset () car ils ont été conçus spécifiquement pour vérifier si une variable est null. De plus, l'opérande! == peut également fonctionner dans ce cas, mais je ne suis pas sûr de rien si PHP dispose de cela. 

2
Nucleon

Assurez-vous qu'avant <?php du fichier php vous n'avez pas d'espace. Cela pourrait aider si vous changiez le type de codage de fichier en UTS_8 sans nomenclature ni espace arrière juste avant le <?php et que vous vous assuriez de ne pas avoir session start() après tout dans le fichier. Il devrait être juste après

2
Nerudo

Essayez ceci. ça va marcher

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

au lieu de header("location: index.php");

Assurez-vous juste avant votre code php que vous n’avez pas d’espace, car c’est important.

Par exemple

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

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

<?php
some code this is the incorrect way the space above matters
?>
1
phpapprentice

Eh bien, si vous avez tout essayé, cet exemple peut vous aider (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>';
?>
0
Clayton Kappaz

Assurez-vous qu'il ne doit y avoir aucun espace au début de votre code

Par exemple:

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

Supprime l'espace de la première ligne, de sorte que <?php doit figurer sur la première ligne.

0
Harpal Singh