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__)
29
demandé sur Charles Sprayberry 2011-06-28 22:02:17

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.

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

81
répondu Charles Sprayberry 2016-05-30 15:56:26

Encore plus simple que dirname(dirname(__FILE__)); utilise __DIR__

dirname(__DIR__);

qui fonctionne à partir de php 5.3.

39
répondu cweiske 2013-02-18 09:03:23
[ 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
5
répondu Friede Petr 2013-06-22 08:19:08

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

1
répondu Jorge Orpinel 2014-10-02 22:09:43

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.

1
répondu Puiu 2016-04-22 16:48:01
require_once(dirname(__FILE__) . "/../../functions.php");
0
répondu Rocky Kumar 2016-11-22 07:04:43

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.

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

0
répondu codywohlers 2016-11-29 19:45:45