Savoir si on est dans un include...

Savoir si on est dans un include... - PHP - Programmation

Marsh Posté le 11-02-2005 à 16:59:59    

y a t il moyen de savoir si ont est dans un include ou si on a appeler le fichier directement ??
 
un peu comme le

Code :
  1. if __name__ == "__main__":

en python...
 
edit : faute dans le titre :o


Message édité par KangOl le 11-02-2005 à 17:09:02

---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 11-02-2005 à 16:59:59   

Reply

Marsh Posté le 11-02-2005 à 17:05:33    

comme l'include est un bête copy-paste il me semble que non. mais je peux me tromper


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 11-02-2005 à 17:24:53    

je ne pense pas non plus,  
et c'est pas très propre comme programmation
;)

Reply

Marsh Posté le 11-02-2005 à 17:29:21    

Ben avec apache (les autres serveurs web j'en sais rien) il existe plusieurs variables donnant le nom du script, les paramêtres, le chemin d'accés au script et même le nom de domaine.
D'ailleur, il y a même une variable qui donne l'intégralité de ces données en contenant carément l'adresse que tu vois dans ton navigateur.
Donc oui, à partir de tout ça, tu peux savoir si ton fichier est demandé en include ou par une demande http.
 
Par contre, je me souviens pas exactement du noms de toutes ces variables. C'est dans $_SERVER si je me souviens bien.
 
Personellement, pour mon site web, en dehors de la page d'accés au site, je n'ai pas la moindre ligne de code qui traine en dehors des fonctions et des objects. Comme ça, même si quelqu'un demande un de ces fichiers , il n'aura rien d'autre qu'une page blanche dans son navigateur et aucune action n'aura été réalisé en php sur le serveur. :)

Reply

Marsh Posté le 11-02-2005 à 17:30:10    

donc a part verifier en dur avec l'url entrée...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 11-02-2005 à 17:35:11    

page1.php

Code :
  1. include 'page2.php';


 
page2.php

Code :
  1. echo "<pre>";
  2. print_r($_SERVER);
  3. echo '</pre>';


 
si j'execute page1.php, il n'est jamais question de page2.php dans la variable $_SERVER :/


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 11-02-2005 à 17:40:55    

Ben oui, logique vu que c'est pas la page demandé depuis l'extérieur du site web. ;) Comme dit JagStang, un include, c'est un copier coller du code de page2.php à la palce du include(page2.php); dans la copie de page1.php exécuté par le serveur.
Au niveau du fichier rien n'est changé (heureusement). C'est dans la mémoire du serveur que c'est fait.

Reply

Marsh Posté le 11-02-2005 à 17:44:43    

Tu pourrais utiliser $PHP_SELF.
 
Avec par exemple ce type de code :

Code :
  1. fichier.php :
  2. if (eregi("fichier.php",$PHP_SELF)) {
  3.     Header("Location: index.php" );
  4.     die(); 
  5. }


Donc la on verifie si "fichier.php" se trouve dans la chaine $PHP_SELF, si c'est le cas, alors on fait une redirection vers index.php.
Cet exemple traite d'un site avec "une seule porte d'entree". En gros, on passe forcement par index.php. Donc ca permet de voir si quelqu'un essaye de rentrer par ailleurs.
 
[edit]
Voila, j'ai retrouve la doc php.
http://ch2.php.net/manual/en/langu [...] efined.php
 

Le manuel à ecrit a écrit :

__FILE__  The full path and filename of the file. If used inside an include, the name of the included file is returned.



 
Il me semble qu'il existe aussi __FILE__ et __LINE__ en php, mais je sais pas s'ils sont utiles dans ce cadre la. utiliser.


Message édité par cerel le 11-02-2005 à 17:50:20
Reply

Marsh Posté le 11-02-2005 à 18:13:41    

__FILE__ est la solution
 

Code :
  1. if ($_SERVER["SCRIPT_FILENAME"] != __FILE__)
  2. {
  3.    /* le fichier est inclus */
  4. }


 
voila :)


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 11-02-2005 à 18:35:53    

Salut,
 
le meilleur plan, c'est de vérifier si ton fichier appartient au tableau retourné par "get_included_files"
 
http://fr.php.net/manual/en/functi [...] -files.php
 
voila.

Reply

Marsh Posté le 11-02-2005 à 18:35:53   

Reply

Marsh Posté le 11-02-2005 à 19:10:43    

bof, ma simple comparaison suffit et est moins lourde...


---------------
Nos estans firs di nosse pitite patreye...
Reply

Marsh Posté le 11-02-2005 à 19:18:50    

Décidément, un probléme = plusieurs solutions. :)
Au fait, parmis toutes ces solutions, certaines ne vont pas poser probléme avec des register_globals à off? Je penses surtout au $PHP_SELF.

Reply

Marsh Posté le 11-02-2005 à 19:33:32    

omega2 a écrit :

Décidément, un probléme = plusieurs solutions. :)
Au fait, parmis toutes ces solutions, certaines ne vont pas poser probléme avec des register_globals à off? Je penses surtout au $PHP_SELF.


 
En effet tu as raison.
il faut plutot utilise $_SERVER['PHP_SELF']
http://ch2.php.net/manual/en/reser [...] les.server

Reply

Marsh Posté le 12-02-2005 à 10:47:23    

En ce qui me concerne, j'utilise toujours une session sur ma page index et je vérifie dans chacune de mes pages que je suis bien dans ma session, sinon, c'est affichage direct de : "Bien essayé, try again..."

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed