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 :

header() ne marche pas


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut header() ne marche pas
    Bonsoir,
    J'utilise cette fonction à plusieurs niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(checkClient($_POST['email'], md5($_POST['pswd']))){
    $_SESSION['user'] = infoClient($_POST['email']);	
    header('Location: account.php');	
    }
    En ligne il ne marche pas mais en local sous wamp ca marche super bien. J'ai une belle page blanche vide si toutes les conditions sont okay en ligne bien sur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    define('VALID_ENTRY_POINT', TRUE);
    include_once './common.php';
    include_once 'sessions.php';
    $logo = getLogo();
    $fichier = UPLOAD_DIRECTORY.$logo;
    $fichier_logo = UPLOAD_DIRECTORY.'logo-'.$logo;	
    if(detelogo()){
    unLinkFile($fichier);
    unLinkFile($fichier_logo);
    }
    header('Location: logo.php');
    Idem en ligne une belle page blanche et en local tout roule super bien.

    Mais si je remplace tous ces appels de header par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<meta http-equiv ="refresh" content = "0;URL=logo.php">';
    Ca roule super bien partout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(!isset($_SESSION['user'])){
      header('Location: ./accueil.php');
    }
    Bizarre ca marche ici partout.


    Qu'est qui ne va pas? Quelqu'un a une idée?

    Merci d'avance...

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    toujours mettre des exit; apres le header, t'as bien ton niveau d'erreur au maximum ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    toujours mettre des exit; apres le header, t'as bien ton niveau d'erreur au maximum ?
    Même avec ca ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    define('VALID_ENTRY_POINT', TRUE);
    include_once './common.php';
    include_once 'sessions.php';
    $logo = getLogo();
    $fichier = UPLOAD_DIRECTORY.$logo;
    $fichier_logo = UPLOAD_DIRECTORY.'logo-'.$logo;	
    if(detelogo()){
    unLinkFile($fichier);
    unLinkFile($fichier_logo);
    }
    header('Location: logo.php');
    exit();

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    et le niveau d'erreur ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    et le niveau d'erreur ?
    Je ne comprends pas votre question. Qu'est-ce vous entendez par niveau d'erreur?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par okoweb Voir le message
    Je ne comprends pas votre question. Qu'est-ce vous entendez par niveau d'erreur?
    dans php tas plusieur niveau d'erreur, qui va de rien afficher en cas d'erreur a afficher toute les erreurs, c'est le error_reporting, tu peux voir ca valeur dans ton phpinfo (verfie aussi le display_errors)

  7. #7
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    cela se configure avec la directive http://php.net/error_reporting

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    dans php tas plusieur niveau d'erreur, qui va de rien afficher en cas d'erreur a afficher toute les erreurs, c'est le error_reporting, tu peux voir ca valeur dans ton phpinfo (verfie aussi le display_errors)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error_reporting(E_ALL);
    J'ai ce bout de code dans common.php que j'ai en include sur toutes les pages.

  9. #9
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    peut-être que l'affichage des erreurs n'est pas activé, essaye de rajouter cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set('display_errors', TRUE);

  10. #10
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Si ça se trouve c'est juste
    au lieu de

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Location: /logo.php');
    exit();

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par Eric2a Voir le message
    Salut,

    Si ça se trouve c'est juste
    au lieu de
    detelogo() ne pose aucun souci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function detelogo(){
    	global $db;
    	$sql = 'UPDATE fiches SET logo = :clean_name
              WHERE user = :user';
    	$statement = $db->prepare($sql);
    	return $statement->execute(array(':user' => $_SESSION['user'], ':clean_name' => '' ));
    }

  13. #13
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 893
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 893
    Points : 16 346
    Points
    16 346
    Par défaut
    Personnellement je penche sur un problème d'encodage avec des caractères BOM invisibles qui s'affichent en haut de document et empêchent le header de se faire.

    @okoweb : Tu travailles en ISO-8859-1 ou en UTF-8 ? Tes fichiers sont enregistrés dans quel encodage ?

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Personnellement je penche sur un problème d'encodage avec des caractères BOM invisibles qui s'affichent en haut de document et empêchent le header de se faire.

    @okoweb : Tu travailles en ISO-8859-1 ou en UTF-8 ? Tes fichiers sont enregistrés dans quel encodage ?
    UTF-8

  15. #15
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 893
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 893
    Points : 16 346
    Points
    16 346
    Par défaut
    Vérifie donc que tes fichiers sont enregistrés en UTF-8 sans BOM (marque d'octets). Si ce n'est pas précisé, c'est que c'est avec et qu'il faut trouver dans ton éditeur l'élément qui le fait passer sans.

  16. #16
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Citation Envoyé par nosferapti
    peut-être que l'affichage des erreurs n'est pas activé, essaye de rajouter cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set('display_errors', TRUE);
    Pourquoi ne tiens tu pas comptes des remarques qui te sont faites ?

    Tu as à plusieurs reprises dis que tu obtenais sans cesse une page blanche, qu'aucune redirection ne se faisait.
    Par conséquent il y a forcément une erreur quelque part, donc être au courant de quelle erreur il s'agit est tout de même important, non ?

    Donc soit tu fais en sorte que tous les messages d'erreurs s'affichent à l'écran (ne serait ce que pendant la phase de développement), soit consulter les logs (php_errors.log entre autre).

    Faut commencer par là, le reste relève du "petit bonheur la chance" de savoir d'où vient l'erreur, c'est la méthode pifomètre quoi.

  17. #17
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    A quel niveau placé ce fonction dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ini_set('display_errors', TRUE);
    Moi je l'ai placé dans mon fichier common.php, il me génère des erreurs sur tous les include_once.

    Mais bizarrement ce matin les header() marchent bien.

    currieux....

  18. #18
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut Gestion d'erreur
    Bonjour à tous,
    Comment jugez cette fonction de gestion d'erreur que j'ai trouvé sur le web?
    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    //Fonction de configuration de la gestion des erreurs
    function gestion_erreur($type_gestion) {
      if ($type_gestion=1) {    //phase de test
       error_reporting (E_ALL | E_STRICT);      //filtrage des erreurs reportées
       ini_set('display_errors', true);      //affichage des erreurs
       ini_set('html_errors', false);       //désactivation des liens html dans les erreurs
       ini_set('display_startup_errors',true);     //affichage des erreurs de démarrage
       ini_set('log_errors', true);       //création d'un fichier de log
       ini_set('error_log', 'journal/error.log');    //localisation du fichier de log
       ini_set('error_prepend_string','<font color="red">'); //début mise en forme erreur
       ini_set('error_append_string','</font>');    //fin mise en forme erreur
       ini_set('ignore_repeated_errors', true);     //ignorer les erreurs répétées
      }
      elseif ($type_gestion=2) {   //phase de production avec fichier log externe
       error_reporting (E_ALL);        //filtrage des erreurs reportées
       ini_set('display_errors', false);      //affichage des erreurs
       ini_set('html_errors', false);       //désactivation des liens html dans les erreurs
       ini_set('display_startup_errors',false);    //affichage des erreurs de démarrage
       ini_set('log_errors', true);       //création d'un fichier de log
       ini_set('error_log', 'journal/error.log');    //localisation du fichier de log
       ini_set('error_prepend_string','<font color="red">'); //début mise en forme erreur
       ini_set('error_append_string','</font>');    //fin mise en forme erreur
       ini_set('ignore_repeated_errors', true);    //ignorer les erreurs répétées
      }
      else {        //phase de production avec journal système
       error_reporting (E_ALL);        //filtrage des erreurs reportées
       ini_set('display_errors', false);      //affichage des erreurs
       ini_set('html_errors', false);       //désactivation des liens html dans les erreurs
       ini_set('display_startup_errors',false);    //affichage des erreurs de démarrage
       ini_set('log_errors', false);
      }
    }
    Meilleures salutations...

  19. #19
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Moi je l'ai placé dans mon fichier common.php, il me génère des erreurs sur tous les include_once.
    Je ne sais pas où se situe le common.php, mais théoriquement la gestion des erreurs devrait se faire le plus tôt possible, sinon les erreurs éventuelles faites en amont ne se verront pas.
    Et bien maintenant tu obtiens les messages d'erreurs, reste plus qu'à tenter de les comprendre et les réparer/corriger.

    Comment jugez cette fonction de gestion d'erreur que j'ai trouvé sur le web?
    C'est pas mal, on peu l'adopter.
    Note bien qu'il est prévu que le journal (les rapports d'erreurs) soient enregistrés ailleurs que dans le fichiers prévu par défaut.
    Ca sous entend de le créer (répertoire/fichier), et qu'il soit suffisamment protégé.

    Mais l'idéal serait que tu ais toi même ton avis sur la manière de gérer tes erreurs de Php, il s'agit de ton application.


    A titre personnel par exemple, je ne vois pas pourquoi proposer 2 modes différents en "production".
    C'est bien quand on conçois un Soft type CMS qui sera utilisé par plusieurs sites Web (donc Webmasters), mais là, pour 1 seul site, je dirais qu'il suffirait de faire un choix, et au bout simplifier ce code.
    Pour ma part, tout peu se jouer sur un simple booléen : Soit on affiche, soit on affiche pas.
    Pour ce qui est d'enregistrer les erreurs dans son propre fichier journal, et bien on prend une bonne fois pour toute la décision (on le fait ou on le fait pas).

    Aussi, j'aurais plus vu de mettre les directives du mode "Production" dans le .htaccess directement, car à part je ne sais quel exception, normalement ça ne devrait jamais changer.
    Le mode "Production" devrait être le mode par défaut.

    Du coup, ce code se réduirait à une peau d'chagrin, soit par je ne sais quel paramètre, de déclencher la fonction qui contiendrait uniquement les codes pour le mode 1 "développement" (ou test) (c'est à dire d'afficher les erreurs).
    A titre d'exemple, on pourrait faire déclencher cette fonction si le code détecte que c'est soit même qui navigue sur le site.
    En tout cas, cette fonction se base sur un paramètre $type_gestion (1, 2 ou 3), et il faut bien quelque chose qui dira dans quel mode l'application doit fonctionner.


    Mais tout ça c'est mon avis. A chacun son approche sur la question.

Discussions similaires

  1. [PHP 5.0] la fonction header ne marche pas
    Par Marc31 dans le forum Langage
    Réponses: 34
    Dernier message: 29/09/2011, 12h06
  2. header qui ne marche pas
    Par adel.87 dans le forum Langage
    Réponses: 3
    Dernier message: 02/06/2008, 16h44
  3. mon header location ne marche pas
    Par 123quatre dans le forum Langage
    Réponses: 1
    Dernier message: 29/12/2007, 16h46
  4. "header()" ne marche pas
    Par Golork dans le forum Langage
    Réponses: 3
    Dernier message: 04/03/2007, 16h51
  5. redirection header ne marche pas!!!
    Par duga dans le forum Langage
    Réponses: 4
    Dernier message: 01/10/2005, 11h58

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