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 :

Qui remplit le contenu de $_SERVER['HTTP_REFERER'] ?


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 423
    Points : 874
    Points
    874
    Par défaut Qui remplit le contenu de $_SERVER['HTTP_REFERER'] ?
    bonjour,

    est-ce que ces dernières années, les conditions qui remplissent le contenu de la variable $_SERVER['HTTP_REFERER'] ont changé au cours des dernières versions de PHP ?

    Je pose la question car je viens de voir des erreurs discretes dans mes log de type "Notice: Undefined index: HTTP_REFERER in ... " sur des lignes de code d'affectation du type :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $mavariable = $_SERVER['HTTP_REFERER'];

    Apparemment, ça produit une erreur NOTICE quand on accède à une page via l'URL (en entrant l'url dans la barre d'adresse) au lieu d’accéder à la page via un clic de souris (donc un lien html href ou un header location via PHP apache).

    si je veux supprimer cette erreur, je dois donc maintenant corriger chaque affectation en testant le contenu avant l'affectation ? PHP ne met pas une valeur null/empty par défaut dedans ?
    donc par exemple :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!isset($_SERVER['HTTP_REFERER']))  $_SERVER['HTTP_REFERER']="saisie à la main via barre d'adresse navigateur";

    Bonne journée

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Bonjour

    C'est une variable serveur donc c'est le service Web qui tourne sur le serveur (apache, nginx, wamp,...).

    Je ne comprends pas trop le pourquoi de ta question car, dans une programmation défensive, tu ne peux pas présumer de ceci ou cela.

    Présumer que la variable existe est un risque de patatras, ton code est cassé.

    Sous Php7 et supérieur, intéresse-toi au double ?? Càd le "null coalescing operator", ton code n'en sera que plus robuste.

  3. #3
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 423
    Points : 874
    Points
    874
    Par défaut
    Je ne comprends pas trop le pourquoi de ta question car, dans une programmation défensive, tu ne peux pas présumer de ceci ou cela.
    je sais que l'erreur NOTICE n'est pas une erreur bloquante mais "alertante", je veux juste ne pas remplir le log de lignes inutiles.

    si je ne me trompe pas, le isset fonctionne par pallier dans le cas d'une variable à tableaux.
    $_SERVER existe dans tous les cas mais pas la variable tableau HTTP_REFERER

    Quand il n'y a pas de 'referer' (l'utilisateur a donc visité la page en l'ayant tapée à la main dans la barre d'adresse ou il a utilisé son bookmark ou sa homepage default), hélas php ne remplit pas HTTP_REFERER en mettant une chaine vide ni un NULL... Au lieu de ça il ne déclare pas HTTP_REFERER !
    Du coup, ça ne sert à rien de test si elle contient NULL car elle n'existe même pas.

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 200
    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 200
    Points : 8 425
    Points
    8 425
    Billets dans le blog
    17
    Par défaut
    hélas php ne remplit pas HTTP_REFERER en mettant une chaine vide ni un NULL... Au lieu de ça il ne déclare pas HTTP_REFERER !
    La valeur ne vient pas de PHP, mais initialement du navigateur client puis du serveur web (en-tête HTTP "Referer").
    Elle peut facilement être modifiée par l'utilisateur, une extension d'anonymisation quelconque, un pare-feu, ...
    Bref, mieux vaut ne pas trop en tenir compte (ou alors à titre purement indicatif) et partir du principe qu'elle peut être définie, indéfinie, voire contenir des données farfelues.

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Bonjour

    Citation Envoyé par clavier12AZQSWX Voir le message
    Quand il n'y a pas de 'referer' (l'utilisateur a donc visité la page en l'ayant tapée à la main dans la barre d'adresse ou il a utilisé son bookmark ou sa homepage default), hélas php ne remplit pas HTTP_REFERER en mettant une chaine vide ni un NULL... Au lieu de ça il ne déclare pas HTTP_REFERER !
    Oui et c'est tant mieux sinon on aurait une flopée de variables nulles... et on aurait une "pollution" du tableau $_SERVER.

    Vois ma proposition ci-dessous; c'est ton code avec juste le ?? pour dire "bah, si tu ne trouves pas, initialise à une chaîne vide". C'est, à mes yeux, et plus propre et plus robuste (plus de NOTICE).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mavariable = $_SERVER['HTTP_REFERER'] ?? '';

  6. #6
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 423
    Points : 874
    Points
    874
    Par défaut
    merci pour la suggestion.
    je ne suis pas présent pour tester mais ... si je me trompe , cette expression $mavariable= $_SERVER['HTTP_REFERER'] ?? ''; revient à écrire

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if  (!is_null ($_SERVER['HTTP_REFERER']) )
    $mavariable= $_SERVER['HTTP_REFERER'] ;
    else
    $mavariable='';

    et donc on teste encore ici une variable dans un index qui n'existe pas, donc ça va me renvoyer le NOTICE UNDEFINED INDEX dans le log ....
    L'écriture a= b ?? c ne fait pas de "isset(a)"....

    à tester à mon retour.....

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

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Bonjour

    ?? contient un isset implicite.

Discussions similaires

  1. [JTable] Cellule editable qui efface mon contenu
    Par Zanton dans le forum Composants
    Réponses: 4
    Dernier message: 01/06/2006, 12h34
  2. Réponses: 7
    Dernier message: 27/05/2006, 01h23
  3. [VBA-E]Erreur avec une combobox qui liste le contenu de cell
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/03/2006, 12h01
  4. [Sécurité] $_SERVER['HTTP_REFERER'] / Norton Internet Security
    Par nicolas.charlot dans le forum Langage
    Réponses: 1
    Dernier message: 13/10/2005, 11h10
  5. Requête paramétrée qui remplit une DBLookUpComboBox
    Par navis84 dans le forum Bases de données
    Réponses: 6
    Dernier message: 02/12/2004, 21h23

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