【发布时间】:2018-11-29 00:00:15
【问题描述】:
我将从 PHP 中的一个示例开始。假设我有这样的文件结构:
.
└── includes
├── file.php
└── test.php
并说我的代码如下所示:
// includes/test.php
require 'file.php';
// includes/file.php
echo 'SUBDIR';
现在,如果我运行 php includes/test.php,我会得到 SUBDIR 作为输出。这不足为奇。
但是假设我在./file.php 添加了一个文件,上面写着echo 'ROOT!';。现在我的树看起来像:
.
├── file.php
└── includes
├── file.php
└── test.php
当我运行php includes/test 时,它会输出ROOT!。我觉得这有点令人惊讶。
当我想到它时,我感到惊讶的不一定是file.php 指的是当前工作目录中的某些东西,而是在它之前没有找到file.php在当前工作目录中,它查看了includes,相对于执行require 的文件。 PHP 处理相对路径的方式似乎有一个微妙的层次结构。
请注意,如果在 includes/test.php 我有 require './file.php'; 代替(前导 ./ 之前只有一个“裸”文件路径),它会按预期工作 IFF “上" file.php 存在。也就是说,带有前导 ./ 的它不会加载 includes/file.php 和致命错误。
实际上,所有这些都归结为:不要使用相对路径!请改用绝对路径!这不是我要问的。
我想知道的是,这只是 UNIX 的东西吗?它是在操作系统级别强制执行的,还是只是按照编程语言的约定?其他语言的行为是否不同?
谢谢。
【问题讨论】:
-
你的
include_path是什么?
标签: unix relative-path