dirname()

本文介绍了PHP中使用__FILE__和dirname()函数获取当前文件及上级目录路径的方法。通过实例展示了如何利用这些内置函数来实现相对路径的引用,适用于动态加载不同层级的文件。
测试的代码如下:
复制代码 代码如下:

<?php
echo __FILE__ ; // 取得当前文件的绝对地址,结果:D:\www\test.php
echo dirname(__FILE__); // 取得当前文件所在的绝对目录,结果:D:\www\
echo dirname(dirname(__FILE__)); //取得当前文件的上一层目录名,结果:D:\
?>

使用方法提示,
dirname(__FILE__) 取到的是当前文件的绝对路径,也就是说,比起相对路径,查找速度是最快的。
如果重复一次可以把目录往上提升一个层次:
比如:$d = dirname(dirname(__FILE__));
其实就是把一个目录给dirname()做参数了.因为dirname()返回最后的目录不带\\或者是/
所以重复使用的时候可以认为 dirname() 把最下层的目录当成文件名来处理了.照常返回
当前目录的上级目录.这样重复就得到了它的上一级的目录.

包含得到上一级目录的文件
include(dirname(__FILE__).'/../filename.php');

__FILE__的路径是当前代码所在文件

dirname(dirname(__FILE__));得到的是文件上一层目录名

dirname(__FILE__);得到的是文件所在层目录名
<think>我们正在讨论的是Linux中的`dirname`命令。根据引用资料,`dirname`命令用于从给定的文件路径中提取目录部分。以下是对其语法的详细说明: ### 1. **基本语法** ``` dirname [选项] 名称... ``` - **名称**:可以是一个或多个文件或目录路径(空格分隔)[^2][^4]。 - **选项**:支持 `-z`、`--help`、`--version` 等选项(详见下文)。 ### 2. **选项详解** | 选项 | 说明 | |------|------| | `-z` 或 `--zero` | 使用空字符(`NUL`)代替换行符分隔输出结果(适用于处理含空格/特殊字符的路径)[^2][^4] | | `--help` | 显示帮助信息并退出[^1][^4] | | `--version` | 显示版本信息并退出[^1][^4] | ### 3. **输出规则** - 若输入路径 **包含斜杠 `/`** → 返回最后一个非斜杠组件的**父目录路径**(移除文件名部分)[^3][^4]。 示例: ```bash $ dirname /usr/bin/sort # → /usr/bin $ dirname /usr/local/bin # → /usr/local ``` - 若输入路径 **不包含斜杠 `/`** → 返回 `.`(表示当前目录)[^3][^5]。 示例: ```bash $ dirname stdio.h # → . $ dirname file.txt # → . (当前目录) ``` - **特殊路径处理**: ```bash $ dirname / # → / (根目录) $ dirname /usr/lib//// # → /usr (自动清理多余斜杠) ``` ### 4. **多参数处理** 可同时处理多个路径,**默认每行输出一个结果**(除非使用 `-z`)[^4]: ```bash $ dirname /a/b/c /d/e/f /a/b /d/e ``` 使用 `-z` 时以 `NUL` 分隔结果(常用于管道处理): ```bash $ dirname -z /a/b/c /d/e/f | xargs -0 -n1 echo /a/b /d/e ``` ### 5. **实际应用场景** #### (1) 在脚本中获取当前脚本所在目录[^3][^4] ```bash #!/bin/bash script_dir=$(dirname "$0") # 提取脚本路径的目录部分 cd "$script_dir" || exit 1 # 切换到该目录 ``` #### (2) 与 `basename` 配合使用(分离路径和文件名)[^4] ```bash full_path="/var/log/syslog" dir_part=$(dirname "$full_path") # → /var/log file_part=$(basename "$full_path") # → syslog ``` #### (3) 批量处理文件路径[^4] ```bash for file in /etc/passwd /etc/group /etc/hosts; do echo "文件 $(basename $file) 位于目录 $(dirname $file)" done ``` ### 6. **注意事项** - **斜杠处理**:路径末尾的斜杠会被忽略(如 `/usr/bin/` 视为 `/usr/bin`)[^3][^4]。 - **相对路径**:支持处理相对路径(如 `../project/config.cfg` → `../project`)[^5]。 - **空格保护**:路径含空格时需用引号包裹(如 `dirname "dir with space/file"`)[^4]。 *** ### 相关问题 1. 如何用 `dirname` 处理带空格的路径? 2. 为什么 `dirname /usr/bin/` 输出 `/usr` 而不是 `/usr/bin`?[^3][^4] 3. 在脚本中如何安全地使用 `dirname "$0"`? 4. `dirname` 和 `basename` 命令的主要区别是什么?[^3][^4] 5. 如何用一行命令提取多个文件的父目录路径? 6. `dirname -z` 选项通常与哪些命令配合使用? 7. 若路径不存在,`dirname` 会如何处理? [^1]: 引用1 [^2]: 引用2 [^3]: 引用3 [^4]: 引用4 [^5]: 引用5 </think>### `dirname` 命令语法详解 #### 1. **基本语法结构** ```bash dirname [选项] 名称... ``` - **名称**:一个或多个文件/目录路径(支持多个参数)[^2][^4] - **选项**:可选参数(详见下文) #### 2. **选项参数** | 选项 | 说明 | |--------------------|----------------------------------------------------------------------| | `-z` 或 `--zero` | 使用 NULL 字符(`\0`)分隔输出结果(替代换行符),便于脚本处理特殊字符 [^2][^4] | | `--help` | 显示帮助信息并退出程序 [^1][^4] | | `--version` | 显示版本信息并退出程序 [^1][^4] | #### 3. **核心处理规则** - 移除路径中 **最后一个非斜杠 (`/`) 的组成部分** 数学表达: $输出 = \begin{cases} \text{路径去除最后一个}/\text{后的内容} & \text{路径包含}/ \\ . & \text{路径不包含}/ \end{cases}$ - **特殊路径处理逻辑**: ```bash dirname /usr/bin # → /usr dirname /usr/bin/ # → /usr(忽略尾部斜杠)[^4] dirname file.txt # → .(当前目录)[^5] dirname / # → /(根目录保留)[^4] dirname ../project.conf # → ..(上级目录) ``` #### 4. **多参数处理** 同时处理多个路径时,**默认每行输出一个结果**: ```bash $ dirname /a/b/c /d/e/f /a/b /d/e ``` 使用 `-z` 时改为 NULL 字符分隔: ```bash $ dirname -z /a/b/c /d/e/f | xargs -0 -n1 echo /a/b /d/e ``` #### 5. **典型应用场景** **1. 获取脚本所在目录**[^3][^4] ```bash #!/bin/bash script_dir=$(dirname "$0") # 关键语句 echo "脚本位置: $script_dir" ``` **2. 分离路径与文件名**(结合 `basename`)[^4] ```bash full_path="/var/log/syslog" dir=$(dirname "$full_path") # → /var/log file=$(basename "$full_path") # → syslog ``` **3. 批量处理路径** ```bash $ find /etc -type f | while read file; do echo "$(dirname $file) | $(basename $file)" done ``` #### 6. **注意事项** 1. **斜杠处理**:路径结尾的 `/` 会被忽略(如 `/usr/bin/` → `/usr`)[^4] 2. **相对路径**:支持处理 `../`、`./` 等相对路径 [^5] 3. **空格保护**:路径含空格时需加引号:`dirname "dir with space/file"` 4. **空输入**:无参数时返回 `.`(当前目录) *** ### 相关问题 1. 为什么 `dirname /usr/bin/` 返回 `/usr` 而不是 `/usr/bin`?[^4] 2. 如何用 `dirname` 处理带空格的特殊路径? 3. `dirname` 和 `basename` 命令的主要区别是什么?[^3][^4] 4. 在脚本中 `$(dirname "$0")` 为何有时返回 `.`?[^3] 5. 如何用一行命令提取多个文件的父目录路径? 6. `dirname -z` 选项通常与哪些命令配合使用?[^2] 7. 若路径不存在,`dirname` 会如何处理? [^1]: 引用1 [^2]: 引用2 [^3]: 引用3 [^4]: 引用4 [^5]: 引用5
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值