簡體   English   中英

從 dirname( __FILE__) 獲得 2 個級別

[英]Get 2 levels up from dirname( __FILE__)

如何從當前文件返回路徑名,只有 2 個目錄?

因此,如果我當前的文件 URL 正在返回theme/includes/functions.php 。php

我怎樣才能返回“主題/”

目前我正在使用

return dirname(__FILE__)

PHP 5.3+

return dirname(__DIR__);

PHP 5.2 及更低版本

return dirname(dirname(__FILE__));

使用 PHP7 go 通過將第二個參數指定給dirname來進一步提升目錄樹。 7 之前的版本需要進一步嵌套dirname

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

甚至比dirname(dirname(__FILE__)); 正在使用__DIR__

dirname(__DIR__);

從 php 5.3 開始工作。

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

如何在 somefile.php 中包含 config.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

派對遲到了,但您也可以執行以下操作,根據需要多次使用\..\..\來提升目錄級別。

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

這相當於:

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

好處是它避免了嵌套 dirname ,如:

dirname(dirname(dirname(__DIR__))

請注意,這是在 IIS 服務器上測試的 - 不確定 linux 服務器,但我不明白為什么它不起作用。

正如@geo 所建議的,這是一個增強的目錄名 function ,它接受具有目錄名搜索深度的第二個參數:

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

注意:@todo 可能是相關的。

唯一的問題是,如果此 function 位於外部包含(例如 util.php)中,則不能使用它來包含此類文件:B

require_once(dirname(__FILE__) . "/../../functions.php");

這是一個古老的問題,但仍然相關。

利用:

basename(dirname(__DIR__));

只返回第二個父文件夾名稱 - 在這種情況下為“主題”。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM