web-dev-qa-db-fra.com

Obtenez 2 niveaux de dirname (__FILE__)

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__)
30
levi

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.

http://php.net/manual/en/function.dirname.php

87
Charles Sprayberry

Encore plus simple que dirname(dirname(__FILE__)); utilise __ DIR __

dirname(__DIR__);

qui fonctionne à partir de php 5.3.

39
cweiske
[ 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
4
Friede Petr

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.

2
puiu

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

1
Jorge Orpinel

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.

http://php.net/manual/en/function.basename.php

0
codywohlers
require_once(dirname(__FILE__) . "/../../functions.php");
0
Rocky Kumar