PHP | dirname 函数

Lasted 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