web-dev-qa-db-ja.com

dirname(__FILE__)から2レベル上に移動します

現在のファイルからパス名を返すにはどうすればよいですか?

したがって、現在のファイルURLがtheme/includes/functions.phpを返している場合

「テーマ/」を返すにはどうすればよいですか

現在使用しています

return dirname(__FILE__)
29
levi

PHP 7

return dirname(__FILE__, 2);

PHP 4以降

return dirname(dirname(__FILE__));

PHP7では、levelsパラメーターを指定することにより、ディレクトリツリーをさらに上に移動できますが、7より前のPHPでは、dirname関数をさらにネストする必要があります。

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

87

dirname(dirname(__FILE__));よりもさらに簡単に __ DIR __ を使用しています

dirname(__DIR__);

php 5.3以降で動作します。

39
cweiske
[ web root ]
    / config.php
    [ admin ] 
        [ profile ] 
            / somefile.php 

Config.phpをsomefile.phpに含めるにはどうすればよいですか?現在のsomefile.phpファイルから3つのディレクトリ構造を持つdirnameを使用する必要があります。

require_once dirname(dirname(dirname(__FILE__))) . '/config.php'; 

dirname(dirname(dirname(__FILE__))) . '/config.php'; # 3 directories up to current file
4
Friede Petr

パーティーに遅れましたが、以下のようなこともできます。_\..\..\_を必要な回数使用して、ディレクトリレベルを上に移動します。

_$credentials = require __DIR__ . '\..\App\Database\config\file.php';_

これは次と同等です:

$credentials = dirname(__DIR__) . '\App\Database\config\file.php';

利点は、次のようにdirnameをネストする必要がないことです。

dirname(dirname(dirname(__DIR__))

これはIISサーバーでテストされています-Linuxサーバーについてはわかりませんが、なぜ機能しないのかわかりません。

2
puiu

@geoが示唆するように、dirname検索の深さで2番目のパラメータを受け入れる拡張dirname関数は次のとおりです。

/**
 * 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;
}

注:@todoが関連する場合があります。

唯一の問題は、この関数が外部インクルード(例:util.php)にある場合、そのようなファイルをインクルードするために使用できないことです:B

1
Jorge Orpinel

これは古い質問ですが、まだ関連があります。

使用する:

basename(dirname(__DIR__));

2番目の親フォルダー名(この場合は「テーマ」)のみを返します。

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

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