Savoir si un fichier est utilisé dans un include ou pas

Eléphanteau du PHP | 17 Messages

02 févr. 2012, 17:44

Bonjour,

est-il possible de savoir si un fichier php est utilisé dans un include ou pas ?

merci

ViPHP
xTG
ViPHP | 7331 Messages

02 févr. 2012, 17:56

Savoir si un fichier a été inclu auparavant ou non ?
Ou bien savoir si un fichier est ouvert en lecture ou écriture ?

Pour le premier il n'existe pas de fonction. Mais pour éviter les erreurs il faut utiliser include_once() ou require_once().
Ainsi si le fichier a déjà été inclu il ne le sera pas la seconde fois et cela ne déclenchera pas de warning.

Eléphant du PHP | 209 Messages

02 févr. 2012, 18:02

Salut,
Pour le premier il n'existe pas de fonction.
En fait si, il existe la fonction get_included_files() : http://php.net/manual/fr/function.get-i ... -files.php

Cela ne reste à utiliser qu'en cas de besoin spécifique. Si c'est juste pour éviter les erreurs d'inclusion, les fonctions include_once et require_once sont faites pour ça comme l'a dit xTG.
Elles sont néanmoins très lentes (de l'ordre de 30% plus qu'un include ou require il me semble) donc à n'utiliser que pour les fichiers pouvant être inclus plusieurs fois.

Si c'est une question de chargement de fichiers, tu peux aussi regarder du côté de l'auto-loading ;)

++

Eléphanteau du PHP | 17 Messages

02 févr. 2012, 18:13

avec get_included_files, le premier fichier retourné est-il toujours le nom du fichier affiché dans la barre d'adresse du navigateur ?

Eléphant du PHP | 209 Messages

02 févr. 2012, 18:16

Oui, ça me semblerait logique puisqu'il s'agit du premier fichier appelé.

Mais quel est ton besoin ? C'est juste de récupérer le nom de ton fichier appelé dans l'URL ?

ViPHP
xTG
ViPHP | 7331 Messages

02 févr. 2012, 18:18

Ah je connaissais pas cette fonction, intéressante. :P

Eléphanteau du PHP | 17 Messages

02 févr. 2012, 18:27

c'est pour des raisons de sécurité, je ne veux pas qu'on se connecte au fichier qui est inclus directement.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

02 févr. 2012, 18:28

d'après la doc oui
Exemple #1 Exemple avec get_included_files()
<?php
// Ce fichier est abc.php

include 'test1.php';
include_once 'test2.php';
require 'test3.php';
require_once 'test4.php';

$included_files = get_included_files();

foreach ($included_files as $filename) {
    echo "$filename\n";
}

?>
L'exemple ci-dessus va afficher :

abc.php
test1.php
test2.php
test3.php
test4.php
regarde plutôt le request uri dans $_SERVER

@+
Il en faut peu pour être heureux ......

ViPHP
xTG
ViPHP | 7331 Messages

02 févr. 2012, 19:03

c'est pour des raisons de sécurité, je ne veux pas qu'on se connecte au fichier qui est inclus directement.
Dans ce cas définir une constante serait mieux...
<?php
if( !defined('MA_CONSTANTE') )
  exit();
Et bien sûr la définition de la constante dans la page qui inclue toutes les autres.

Eléphanteau du PHP | 17 Messages

02 févr. 2012, 20:01

est-il possible de récupérer le nom du fichier inclus, avec $_SERVER["PHP_SELF"], on récupère le nom du fichier qui inclut même si on le met dans la page incluse.
Comment récupérer le nom du fichier inclus ?

ViPHP
xTG
ViPHP | 7331 Messages

02 févr. 2012, 20:19

L'index PHP_SELF c'est le nom de la page appelée, pas d'un script inclus. C'est en quelque sorte le script parent de tous les autres.
Pour les scripts inclus c'est la fonction précédemment donnée.

ViPHP
ViPHP | 2287 Messages

03 févr. 2012, 19:03

D'après le manuel, debug_backtrace() permet aussi de savoir si on se trouve dans un fichier inclus ou un fichier maître.

http://fr2.php.net/manual/en/function.d ... .php#97508
if(!@work()){ Nespresso(); } else { what(); }
______________________________