Comment puis-je retourner le chemin d'accès à partir du fichier actuel, seulement 2 répertoires vers le haut?
Donc, si mon URL de fichier actuelle renvoie theme/includes/functions.php
Comment puis-je retourner "thème /"
Actuellement j'utilise
return dirname(__FILE__)
PHP 7
return dirname(__FILE__, 2);
PHP 4 et supérieur
return dirname(dirname(__FILE__));
Avec PHP7, vous pouvez aller plus loin dans l'arborescence des répertoires en spécifiant le paramètre niveaux, tandis qu'avant 7 PHP nécessitera une imbrication supplémentaire de la fonction dirname
.
Encore plus simple que dirname(dirname(__FILE__));
utilise __ DIR __
dirname(__DIR__);
qui fonctionne à partir de php 5.3.
[ web root ]
/ config.php
[ admin ]
[ profile ]
/ somefile.php
Comment pouvez-vous inclure config.php dans somefile.php? Vous devez utiliser dirname avec la structure de 3 répertoires du fichier somefile.php actuel.
require_once dirname(dirname(dirname(__FILE__))) . '/config.php';
dirname(dirname(dirname(__FILE__))) . '/config.php'; # 3 directories up to current file
Tard dans la soirée, mais vous pouvez également faire quelque chose comme ci-dessous, en utilisant \..\..\
Autant de fois que nécessaire pour monter dans les niveaux du répertoire.
$credentials = require __DIR__ . '\..\App\Database\config\file.php';
Ce qui équivaut à:
$credentials = dirname(__DIR__) . '\App\Database\config\file.php';
L'avantage étant qu'il évite d'avoir à imbriquer dirname comme:
dirname(dirname(dirname(__DIR__))
Notez que cela est testé sur un serveur IIS - pas sûr d'un serveur linux, mais je ne vois pas pourquoi cela ne fonctionnerait pas.
Comme suggéré par @geo, voici une fonction de nom de répertoire améliorée qui accepte un deuxième paramètre avec la profondeur d'une recherche de nom de répertoire:
/**
* Applies dirname() multiple times.
* @author Jorge Orpinel <[email protected]>
*
* @param string $path file/directory path to beggin at
* @param number $depth number of times to apply dirname(), 2 by default
*
* @todo validate params
*/
function dirname2( $path, $depth = 2 ) {
for( $d=1 ; $d <= $depth ; $d++ )
$path = dirname( $path );
return $path;
}
Remarque: que @todo peut être pertinent.
Le seul problème est que si cette fonction est dans un include externe (par exemple util.php) vous ne pouvez pas l'utiliser pour inclure un tel fichier: B
C'est une vieille question mais toujours d'actualité.
Utilisation:
basename(dirname(__DIR__));
pour renvoyer uniquement le deuxième nom du dossier parent - "thème" dans ce cas.
require_once(dirname(__FILE__) . "/../../functions.php");