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

EDI, CMS, Outils, Scripts et API PHP Discussion :

defined( '_JEXEC' ) ? [Joomla!]


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre Expert
    Avatar de kaiser59
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 264
    Par défaut defined( '_JEXEC' ) ?
    Bonjour,

    Dans toutes les pages (quasi) on peut voir en début de page ce fameux :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    defined('_JEXEC') or die('Restricted access');

    Bien que je ne suis pas expert en php, j'ai compris que cela regarde si on est loger sinon ça nous redirige, le truc que je ne comprends pas c'est que, d'après ce que j'ai pu comprendre, "define" c'est pour déclarer une constante qui est le cas, mais, comment peut il y avoir une condition (le "or") et comment fait il pour comparer le define alors qu'il n'y a rien avant cette ligne qui permet d'attribuer quelque chose à JEXEC ?

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    Tout simplement parce que les constantes, contrairement aux variables, ne subissent pas de notion de porté: elles sont disponibles dans tous les scripts / fonctions / classes.

    Par ailleurs, ne confonds pas define qui sert à définir une constante et defined qui teste si une constant est définie et renvoie un booléen.

    Je n'ai jamais vraiment compris comment fonctionnait 'or', d'ailleurs y'a pas tellement de doc là dessus. Tout ce que je sais c'est que ça réagit (c'est vivant!) à une expression booléene:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $a = false or die('argh!'); // die everytime
    Curieusement, ça n'a l'air d'avoir un effet qu'avec le die. Quelqu'un de compétent pourrait nous en dire plus ?

  3. #3
    Membre Expert
    Avatar de kaiser59
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 264
    Par défaut
    ok faut avoir l'oeil attentif j'avais pas percuter qu'il y avait define et defined

    J'ai vue dans un tutorial la fonction ob_start(); et je me demande si joomla n'utiliserais pas ce système pour implémenter ces pages, vue qu'il test à chaque fois si la variable existe mais qu'il n'y a jamais rien avant, notamment le controle des sessions, des class etc...

  4. #4
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Il doit probablement initaliser cette constante dans son boostraper, l'autoload des classes est mis à cet endroit également.
    ob_start quand à lui set à capturer le buffer de sortie en vue de le manipuler.

  5. #5
    Membre Expert
    Avatar de kaiser59
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 264
    Par défaut
    Ah d'accord !

    Il y en as des choses dis donc ^^

    Merci pour tes réponses Benjamin

  6. #6
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    ce n'est pas çà du tout. Le test defined('const') or doSomethingElse() sert simplement à s'assurer que la constante est définie (oui çà on sait ).
    Mais surtout : si la constante n'est pas définie, cela signifie que l'on tente d'accéder directement au script via son URL, ce qui n'est pas autorisé. Le script doit être uniquement chargé dans le contexte de Joomla.

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Ok je ne savais pas que Joomla utilisait cette technique. Remarque, on fait ça traditionnellement avec Apache en définissant des règles d'accès dans le .htaccess.

    Par exemple, je redirige systématiquement vers /app/webroot/index.php.

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

Discussions similaires

  1. #define D3D_DEBUG_INFO
    Par moldavi dans le forum DirectX
    Réponses: 7
    Dernier message: 03/02/2005, 14h14
  2. INSO Filter : "USER-defined exception" avec ctx_do
    Par Wiztiti dans le forum Oracle
    Réponses: 2
    Dernier message: 01/06/2004, 16h14
  3. USER DEFINE FONCTION : PB éxécution requête
    Par juelo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/01/2004, 11h12
  4. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45
  5. define avec GCC.
    Par vagabon dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 12/06/2003, 14h04

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