PHP | dirname 函數

怎樣獲取字符串路徑中的目錄部分

最近更新時間 2020-12-30 18:51:14

dirname 返回路徑中的目錄部分。

dirname() 函數是一個內置函數,用於返回給定路徑的目錄名稱。可傳入目錄深度為 levels 級,默認為1級,返回值為字符串。

dirname() 純粹基於輸入字符串操作, 它不會受實際文件系統和類似 ".." 的路徑格式影響。

函數定義

dirname(string $path [, int $levels = 1 ]):string
// 源文件位於:ext/standard/string.c
# 函數定義

PHP_FUNCTION(dirname)
{
  ...
  ret = zend_string_init(str, str_len, 0);

  if (levels == 1) {
    /* Default case */
#ifdef PHP_WIN32
    ZSTR_LEN(ret) = php_win32_ioutil_dirname(ZSTR_VAL(ret), str_len);
#else
    ZSTR_LEN(ret) = zend_dirname(ZSTR_VAL(ret), str_len);
#endif
  } else if (levels < 1) {
    zend_argument_value_error(2, "must be greater than or equal to 1");
    zend_string_efree(ret);
    RETURN_THROWS();
  } else {
    /* Some levels up */
    do {
#ifdef PHP_WIN32
      ZSTR_LEN(ret) = php_win32_ioutil_dirname(ZSTR_VAL(ret), str_len = ZSTR_LEN(ret));
#else
      ZSTR_LEN(ret) = zend_dirname(ZSTR_VAL(ret), str_len = ZSTR_LEN(ret));
#endif
    } while (ZSTR_LEN(ret) < str_len && --levels);
  }

  RETURN_NEW_STR(ret);
}

參數

  • checkpath - 字符串路徑。在 Windows 中,斜線(/)和反斜線(\)都可以用作目錄分隔符。在其它環境下是斜線(/)。
  • checklevels - 上級目錄的層級。整型,必須大於 0。

返回值

  • checkstring - 返回 path 的父目錄。 如果在 path 中沒有斜線,則返回一個點('.'),表示當前目錄。否則返回的是把 path 中結尾的 /component(最後一個斜線以及後面部分)去掉之後的字符串。

示例1: - 使用 dirname() 函數獲取路徑中的目錄部分。

<?php
/**
 * PHP 使用 dirname() 函數獲取路徑中的目錄部分。
 *
 * @since Version 1.0.0
 * @filesource
 */

// 顯示目錄部分
echo dirname("/etc/passwd") . PHP_EOL;
echo dirname("/etc/") . PHP_EOL;
echo dirname("passwd") . PHP_EOL;
echo dirname("/usr/sbin/sysctl") . PHP_EOL;

// 獲取當前腳本文件的目錄
echo dirname(__FILE__) . PHP_EOL;
/etc
/
.
/usr/sbin
/data/wwwroot/docs
rss_feed