J'ai cherché haut et bas et j'obtiens beaucoup de différentes solutions et variables contenant des informations pour obtenir le chemin absolu. Mais ils semblent fonctionner dans certaines conditions et pas dans d'autres. Existe-t-il une solution miracle pour obtenir le chemin absolu du script exécuté en PHP? Pour moi, le script s'exécutera à partir de la ligne de commande, mais une solution devrait fonctionner aussi bien si elle est exécutée dans Apache, etc.
Clarification: le script initialement exécuté, pas nécessairement le fichier où la solution est codée.
Réponses:
La bonne solution consiste à utiliser la
get_included_files
fonction:Cela vous donnera le chemin absolu du script initial même si:
Voici deux scripts de test; le script principal et un fichier inclus:
Et le résultat; notez le répertoire courant:
la source
get_included_files()
. Je suggère de stocker__FILE__
dans une constante au début du script destiné à être exécuté initialement.__FILE__
constante vous donnera un chemin absolu vers le fichier actuel.Mise à jour :
La question a été modifiée pour demander comment récupérer le script initialement exécuté au lieu du script en cours d'exécution. La seule (??) manière fiable de le faire est d'utiliser la
debug_backtrace
fonction.la source
__FILE__
retourner l'emplacement de l'index.php ou l'emplacement du fichier inclus? Comment puis-je obtenir l'emplacement de index.php?__FILE__
indique le chemin du script actuel. Mais je n'ai rien trouvé pour montrer le chemin actuel de index.php.La réponse a été déplacée ici - https://stackoverflow.com/a/26944636/2377343
la source
str_replace( basename(__FILE__) , '',str_replace($_SERVER["DOCUMENT_ROOT"],'',str_replace('\\','/',__FILE__ ) ) ) === /folder1/folder2/
Si vous le placez dans un fichier inclus, il imprime le chemin d'accès à cette inclusion. Pour obtenir le chemin du script parent, remplacez
__FILE__
par$_SERVER['PHP_SELF']
. Mais sachez que PHP_SELF est un risque pour la sécurité!la source
__FILE__
contient toujours un chemin absolu avec des liens symboliques résolus alors que dans les anciennes versions il contenait un chemin relatif dans certaines circonstances." plus "dirname () fonctionne naïvement sur la chaîne d'entrée et ne connaît pas le système de fichiers réel, ni les composants de chemin tels que '..'.PHP_SELF
??Du manuel :
Remarque : a
__DIR__
été ajouté en PHP 5.3.0.la source
Si vous souhaitez obtenir le répertoire de travail actuel, utilisez
getcwd()
http://php.net/manual/en/function.getcwd.php
__FILE__
renverra le chemin avec le nom de fichier par exemple sur XAMPPC:\xampp\htdocs\index.php
au lieu deC:\xampp\htdocs\
la source
donnera l' itinéraire absolu du fichier courant à partir duquel vous demandez l'itinéraire, l'itinéraire de votre répertoire de serveur.
fichiers d'exemple:
www / http / html / index.php; si vous placez ce code dans votre index.php, il renverra:
<?php echo dirname(__FILE__); // this will return: www/http/html/
www / http / html / class / myclass.php; si vous placez ce code dans votre myclass.php, il renverra:
<?php echo dirname(__FILE__); // this will return: www/http/html/class/
la source
Utilisez simplement ci-dessous:
la source
a.php->b.php->c.php
devrait être le chemin d'accès de a.php s'il est coché dans c.php . La seule façon qui semble fiable est d'utiliser la fonction debug_backtrace () .il vous donne le répertoire du script actuel (le script dans lequel vous avez placé ce code) sans barre oblique de fin. c'est important si vous voulez inclure d'autres fichiers avec le résultat
la source
Si vous recherchez le chemin absolu par rapport à la racine du serveur, j'ai trouvé que cela fonctionne bien:
la source
Voici une fonction PHP utile que j'ai écrite pour cela précisément. Comme la question d'origine le clarifie, elle renvoie le chemin à partir duquel le script initial a été exécuté - pas le fichier dans lequel nous sommes actuellement.
la source
essayez ceci sur votre script
la source
Pour le script exécuté sous le serveur Web
$_SERVER['SCRIPT_FILENAME']
, le chemin d'accès complet au script initialement appelé sera contenu, donc probablement votre index.php.realpath()
n'est pas requis dans ce cas.Pour le script exécuté à partir de la console,
$_SERVER['SCRIPT_FILENAME']
il contiendra un chemin d'accès relatif à votre script initialement appelé à partir de votre répertoire de travail actuel. Donc, à moins que vous n'ayez modifié le répertoire de travail dans votre script, il se résoudra en chemin absolu.la source
C'est ce que j'utilise et cela fonctionne dans les environnements Linux. Je ne pense pas que cela fonctionnerait sur une machine Windows ...
la source
Une façon simple d'avoir le chemin absolu du script exécuté d' abord , dans ce script et tout autre script inclus avec
include
,require
,require_once
est à l'aide d' une constante et le stockage il le chemin du script en cours au début du script principal :La solution ci-dessus convient quand il existe un seul script "principal" qui correspond à
include
tous les autres scripts nécessaires, comme dans la plupart des applications Web.Si ce n'est pas le cas et qu'il peut y avoir plusieurs "scripts initiaux", alors pour éviter les redéfinitions et pour avoir le chemin correct stocké dans la constante, chaque script peut commencer par:
Une note sur la réponse (actuellement) acceptée :
la réponse indique que le chemin du script initialement exécuté est le premier élément du tableau renvoyé par
get_included_files()
.Il s'agit d'une solution intelligente et simple et -au moment de l'écriture- (nous sommes presque à PHP 7.4.0) cela fonctionne .
Cependant, en regardant la documentation, il n'est pas mentionné que le script initialement exécuté est le premier élément du tableau retourné par
get_included_files()
.Nous lisons seulement
Au moment de l'écriture, le " script appelé à l'origine " est le premier du tableau mais - techniquement - il n'y a aucune garantie que cela ne changera pas à l'avenir.
Une note sur
realpath()
,__FILE__
et__DIR__
:D' autres ont suggéré dans leurs réponses l'utilisation de
__FILE__
,__DIR__
,dirname(__FILE__)
,realpath(__DIR__)
...dirname(__FILE__)
est égal à__DIR__
(introduit en PHP 5.3.0), il suffit donc de l'utiliser__DIR__
.Les deux
__FILE__
et__DIR__
sont toujours des chemins absolus, ilrealpath()
n'est donc pas nécessaire.la source