IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

redirection header qui se plante


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 417
    Points : 5 771
    Points
    5 771
    Billets dans le blog
    1
    Par défaut redirection header qui se plante
    Bonjour,

    index.php placé à la racine du projet :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    //session_start();
    //include "vendor".DIRECTORY_SEPARATOR."autoload.php";
     
    //require 'routing.php';
     
    //echo "page=".$page;
    //header("Location: ".$page);
    header("Location: /controllers/Home-controller.php");
    Au lieu de rediriger vers le fichier http://dev.arnaudmarionmvc.fr/controllers/Home-controller.php ça met dans la barre d'adresse du navigateur (Firefox ou Chrome) http://dev.arnaudmarionmvc.fr/controllers/index.php?page=login. J'ai vidé le cache du navigateur. Rien n'y fait. Comment expliquer cela ?

    J'ai aussi essayé header("Location: controllers/Home-controller.php"); et header("Location: ./controllers/Home-controller.php");
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 769
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour Laurent

    Si tu reprends le code que tu proposes ci-dessus, toutes les lignes sont en commentaire excepté la ligne 9 qui fait le redirect.

    La source de ton problème est obligatoirement ailleurs. Ton code source, celui que tu montres, ne peut pas provoquer la situation que tu indiques dans ton message.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  3. #3
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 171
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 171
    Points : 8 359
    Points
    8 359
    Billets dans le blog
    17
    Par défaut
    Je suis d'accord avec cavo789.

    J'ajouterais qu'après ton header('Location: ...') tu ne fais pas de exit (ce qui est une mauvaise pratique).

    Ce qui veut dire qu'il y a peut-être un autre header() *après* qui prend la main sur la redirection, ou, au contraire, un autre header() *avant* lui-même non suivi d'un exit.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 417
    Points : 5 771
    Points
    5 771
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    ce que vous dite semble évident ; dommage que je me le sois pas dit...

    Séb., j'ai aussi remarqué après coup que le exit manquait (ce n'est pas moi l'auteur de ce code) et je l'ai rajouté après avoir écrit le post :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header("Location: ./controllers/Home-controller.php");
    exit();
    donc oui, le problème se situe dans le fichier vers lequel on redirige ; il contient un autre header :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    else {
            header('Location: ../index.php?page=login');
            exit;
        }
    Le retour arrière, je viens de le rajouter, mais ça ne doit pas être bon :
    La page n’est pas redirigée correctement
    Comment faut faire vu que le fichier vers lequel on redirige se situe un cran en arrière par rapport à son parent ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 769
    Points : 3 016
    Points
    3 016
    Par défaut
    Pour info, ce que tu souhaites faire se nomme un routeur.

    Perso le seul et unique point d'entrée de mes applications PHP est le seul index.php se trouvant dans mon projet. Je n'utilise donc jamais de redirection comme tu le fais.

    Index.php va faire appel à des classes php (merci à composer), exécuter une méthode d'une classe donnée et revenir dans index.php. Aucune redirection.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 877
    Points
    1 877
    Par défaut
    Deux suggestions:

    Il peut être intéressant de tester son site avec curl, Par exemple pour juste voir les headers, y compris les headers de redirection on peut exécuter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl -v -L --head <url>
    Et peut-être que vous constaterez la présence de headers parasites ou redirections multiples.

    D'autre part, c'est une mauvaise habitude d'utiliser des chemins relatifs au lieu d'une URL complète avec le nom de domaine et le scheme (https).
    Utiliser des chemins relatifs ça revient à laisser le browser se débrouiller pour reconstituer l'URL complète, et cela peut être une source de problème si la résolution de cette URL ne se fait pas correctement.

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 417
    Points : 5 771
    Points
    5 771
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    si je suis silencieux depuis hier, c'est pas que j'ai abandonné ; bien au contraire, mais ce que j'essaye me prend du temps et je pense que j'aurai bientôt besoin à nouveau d'aide...

    Pour commencer, Christophe, je sais bien que ce que je voudrais faire est un routeur.
    Le tuto que tu m'as donné, je n'ai que commencé à le regarder, mais priorité à modifier mon code.
    Ce qui me prend du temps, c'est justement de faire comme toi (dans le passé, j'ai déjà fait comme ça) : point d'entrée unique (index.php) et on appelle des classes donc pas de redirections.

    index.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    session_start();
    include "vendor".DIRECTORY_SEPARATOR."autoload.php"; //autoload de composer
     
    require ("elements".DIRECTORY_SEPARATOR."head.php");
    require ("elements".DIRECTORY_SEPARATOR."header.php");
    require ("elements".DIRECTORY_SEPARATOR."nav.php");
    require 'routing.php';
    require ("elements".DIRECTORY_SEPARATOR."footer.php");
     
    ?>

    routing.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    declare(strict_types=1);
     
    $routes = [
        'accueil' => PasDePanique\controllers\Home::class, //à terme y aura que des classes
        'register' => 'controllers/Register-controller',
        'login' => 'controllers/Login-controller',
        'profil' => 'controllers/Profil-controller'
    ];
     
    $route = isset($_GET['page'], $routes[$_GET['page']]) ? $_GET['page'] : 'accueil';
     
    $controller = new $routes[$route];
    $controller->invoke(); //toutes les classes doivent comporter une méthode invoke

    Home.php :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    class Home{
    private function homeView()
        {
        ...
        }
     
     private function getName()
        {
           ...
        }
     
     public function invoke()
        {
            homeView();
        }
    }

    Citation Envoyé par binarygirl Voir le message
    Il peut être intéressant de tester son site avec curl, Par exemple pour juste voir les headers, y compris les headers de redirection on peut exécuter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    curl -v -L --head <url>
    Et peut-être que vous constaterez la présence de headers parasites ou redirections multiples.
    Où fait-on ça ? J'ai essayé de mettre cette commande en invite de commande, mais :
    curl -v -L --head <url>
    La syntaxe de la commande n’est pas correcte.
    Citation Envoyé par binarygirl Voir le message
    D'autre part, c'est une mauvaise habitude d'utiliser des chemins relatifs au lieu d'une URL complète avec le nom de domaine et le scheme (https).
    Utiliser des chemins relatifs ça revient à laisser le browser se débrouiller pour reconstituer l'URL complète, et cela peut être une source de problème si la résolution de cette URL ne se fait pas correctement.
    Bien noté, même si plus besoin de chemin vu qu'y a plus de redirection.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #8
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 769
    Points : 3 016
    Points
    3 016
    Par défaut
    Je réponds dans l'absolu : quand ça ne marche pas il faut parfois arrêter de tenter de bricoler et voir comment, proprement, on peut y arriver.

    Il existe des framework php (laravel p.ex.), css (Tailwind, bulma,...) , etc. qui certes demandent du temps à apprendre mais qui te permet de ne pas perdre des heures et des heures à chipoter et au final n'avoir qu'un résultat boiteux.

    Je parle dans l'absolu parce que c'est la grosse artillerie peut-être pour ton besoin ici présent mais l'idée est de ne pas réinventer la roue et de profiter de ce qui existe en open source et de l'utiliser sans prise de tête (si ce n'est l'apprentissage ce qui correspond au temps perdu pour le bricolage).
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 417
    Points : 5 771
    Points
    5 771
    Billets dans le blog
    1
    Par défaut
    Je progresse mais rencontre encore des problèmes. Cela dit, ça risque de faire l'objet d'une autre discussion vu que le titre de celle-ci ne convient plus du tout. Je la clôturerai quand j'aurai la réponse à ma question sur curl.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  10. #10
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 769
    Points : 3 016
    Points
    3 016
    Par défaut
    Curl est un outil en ligne de commandes pour Linux. Il y a peut-être une possibilité de l'installer sous Windows
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  11. #11
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 417
    Points : 5 771
    Points
    5 771
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cavo789 Voir le message
    Il existe des framework php (laravel p.ex.)
    Je ne suis certes pas un expert, mais je connais quand même 2/3 trucs sur PHP. Je crains que si j'utilise Laravel, ça va plus servir à rien et je risque de plus d'oublier mes connaissances actuelles. Qu'en penses tu ?

    Citation Envoyé par cavo789 Voir le message
    Curl est un outil en ligne de commandes pour Linux. Il y a peut-être une possibilité de l'installer sous Windows
    Ca, c'est un argument pour laisser tomber.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  12. #12
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 769
    Points : 3 016
    Points
    3 016
    Par défaut
    Curl serait dispo pour Windows (https://www.ionos.fr/digitalguide/se...-sous-windows/ et https://stackoverflow.com/questions/...url-on-windows).

    Pour la première question, c'est toi qui vois... Laravel demande un (très) gros apprentissage donc je dirais non, ne prends pas le temps de l'étudier ... par contre laravel vient avec tellement d'outils que tu serais guidé dans ta programmation et que tu n'aurais pas à réinventer la roue.

    Ne l'apprends pas et reste sur tes connaissances car apprendre laravel ne sera pas simple (temps et difficultés) mais oui tu aurais un cadre plus robuste et tu aurais moins de souci futur puisque les routes existent, des centaines (milliers) de classes sont à ta disposition. Tu es véritablement pris en main mais cela coûte de l'énergie à l'apprentissage.

    N'apprends pas Laravel car c'est un gros chantier mais... tu serais bien plus efficace ensuite.

    Bref tu le comprendras, ta question est impossible à répondre.

    Ne migre pas vers laravel mais commence peut-être par suivre des tutoriels comme celui que j'avais évoqué plus haut et apprends à utiliser des technologies qui ont fait leur preuve. Ne réinvente pas ce qui existe déjà et que d'autres utilisent avec succès (le nombre d'installation, de like,... sont des critères de sélection).
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 877
    Points
    1 877
    Par défaut
    Je plussoie ce qui a été dit plus haut: je pense que ça vaudrait la peine d'apprendre à utiliser un framework. Ca éviterait ce genre de bricolage. Et puis bon, il faut évoluer dans les méthodes de travail.
    Les frameworks existent justement pour décharger le développeur de toutes ces tâches sans grande valeur ajoutée.
    Et cela augmenterait votre valeur sur le marché de l'emploi

    L'investissement en temps se justifie quand on prend en compte le temps passé à a) réinventer la roue, puis b) à troubleshooter les erreurs.

    Maintenant, je comprends que ça peut être overkill par rapport au besoin, mais alors vous pouvez quand même implémenter un routeur léger pour centraliser les routes, ce qui est beaucoup plus ordonné et facilite l'évolution du projet. A combiner avec un template engine comme Twig.

  14. #14
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 417
    Points : 5 771
    Points
    5 771
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par binarygirl Voir le message
    vous pouvez quand même implémenter un routeur léger pour centraliser les routes, ce qui est beaucoup plus ordonné et facilite l'évolution du projet. A combiner avec un template engine comme Twig.
    Je ne vois le post que une semaine après, n'ayant pas reçu de notification...

    Le routeur existe déjà et comme template engine, je compte utiliser https://github.com/rawsrc/PhpEcho
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Cookies] Redirection Header qui ne fonctionne pas
    Par arnaudperfect dans le forum Langage
    Réponses: 10
    Dernier message: 20/03/2007, 09h19
  2. Problème redirection header ('location:
    Par Jiraiya42 dans le forum Langage
    Réponses: 1
    Dernier message: 24/06/2006, 17h08
  3. [Frame] [Redirection] Header
    Par trach.sam dans le forum Langage
    Réponses: 3
    Dernier message: 16/05/2006, 16h45
  4. redirection header ne marche pas!!!
    Par duga dans le forum Langage
    Réponses: 4
    Dernier message: 01/10/2005, 11h58
  5. Header qui ne s'affiche pas
    Par Kodenji dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 04/08/2005, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo