PHP | pathinfo 函数

Lasted 2021-01-19 15:58:19

pathinfo 函数获取文件路径信息。

pathinfo() 函数包含两个参数,第一个参数为路径,第二个为可选参数决定返回数组中的内容。

函数定义

pathinfo ( string $path , int $options = PATHINFO_DIRNAME | PATHINFO_BASENAME | PATHINFO_EXTENSION | PATHINFO_FILENAME ) : mixed
// 源文件位于:ext/standard/string.c
# 函数定义

PHP_FUNCTION(pathinfo)
{
  ...
  if ((opt & PHP_PATHINFO_DIRNAME) == PHP_PATHINFO_DIRNAME) {
    dirname = estrndup(path, path_len);
    php_dirname(dirname, path_len);
    if (*dirname) {
      add_assoc_string(&tmp, "dirname", dirname);
    }
    efree(dirname);
  }

  if (have_basename) {
    ret = php_basename(path, path_len, NULL, 0);
    add_assoc_str(&tmp, "basename", zend_string_copy(ret));
  }

  if ((opt & PHP_PATHINFO_EXTENSION) == PHP_PATHINFO_EXTENSION) {
    const char *p;
    ptrdiff_t idx;

    if (!have_basename) {
      ret = php_basename(path, path_len, NULL, 0);
    }

    p = zend_memrchr(ZSTR_VAL(ret), '.', ZSTR_LEN(ret));

    if (p) {
      idx = p - ZSTR_VAL(ret);
      add_assoc_stringl(&tmp, "extension", ZSTR_VAL(ret) + idx + 1, ZSTR_LEN(ret) - idx - 1);
    }
  }
  ...
  if (opt == PHP_PATHINFO_ALL) {
    ZVAL_COPY_VALUE(return_value, &tmp);
  } else {
    zval *element;
    if ((element = zend_hash_get_current_data(Z_ARRVAL(tmp))) != NULL) {
      ZVAL_COPY_DEREF(return_value, element);
    } else {
      ZVAL_EMPTY_STRING(return_value);
    }
    zval_ptr_dtor(&tmp);
  }
}

参数

  • checkpath - 要解析的路径。
  • checkoptions - 如果指定了,将会返回指定元素,包括:PATHINFO_DIRNAME,PATHINFO_BASENAME 和 PATHINFO_EXTENSION 或 PATHINFO_FILENAME。可进行异或运算。可选参数,默认返回所有值。

返回值

  • checkmixed - 包含dirname等信息的数组,失败时返回 false。

示例1: - 使用 pathinfo() 函数获取文件路径信息。

<?php
/**
 * PHP pathinfo() 函数获取文件路径信息。
 *
 * @since Version 1.0.0
 * @filesource
 */

// 获取路径信息
$path_info = pathinfo("/data/foot文件.txt");

print_r($path_info);
Array
(
  [dirname] => /data
  [basename] => foot文件.txt
  [extension] => txt
  [filename] => foot文件
)