Obtenir 2 niveaux à partir de dirname (fichier)
Comment puis-je retourner le chemin d'accès à partir du fichier courant, seulement 2 répertoires vers le haut?
donc si je renvoie L'URL de mon fichier theme/includes/functions.php
Comment puis-je retourner "thème/"
actuellement j'utilise
return dirname(__FILE__)
7 réponses
PHP 7
return dirname(__FILE__, 2);
PHP 4 et plus
return dirname(dirname(__FILE__));
avec PHP7 vous pouvez aller plus loin dans L'arborescence des répertoires en spécifiant le paramètre levels, tandis que le pré-7 PHP va nécessiter un emboîtement supplémentaire du dirname
fonction.
[ web root ]
/ config.php
[ admin ]
[ profile ]
/ somefile.php
Comment pouvez-vous inclure config.php en somefile.le php? Vous devez utiliser dirname avec la structure de 3 répertoires à partir du somefile actuel.fichier php.
require_once dirname(dirname(dirname(__FILE__))) . '/config.php';
dirname(dirname(dirname(__FILE__))) . '/config.php'; # 3 directories up to current file
comme suggéré par @geo, voici une fonction dirname améliorée qui accepte un second param avec la profondeur d'une recherche dirname:
/**
* Applies dirname() multiple times.
* @author Jorge Orpinel <jorge@orpinel.com>
*
* @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;
}
Note: @todo peuvent être pertinents.
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
Fin de la partie, mais vous pouvez aussi faire quelque chose comme ci-dessous, à l'aide de \..\..\
autant de fois que nécessaire pour monter les niveaux des répertoires.
$credentials = require __DIR__ . '\..\App\Database\config\file.php';
qui est l'équivalent de:
$credentials = dirname(__DIR__) . '\App\Database\config\file.php';
L'avantage est qu'il évite le nid dirname de la forme:
dirname(dirname(dirname(__DIR__))
notez que ceci est testé sur un serveur IIS - pas sûr pour un serveur linux, mais je ne vois pas pourquoi ça ne marcherait pas.
c'est une vieille question mais pertinente.
Utilisation:
basename(dirname(__DIR__));
pour retourner Seulement le nom du deuxième dossier parent - "thème" dans ce cas.