tl;dr: 如何使PHP从当前文件的角度解释包含/要求语句中的相对路径?
这是关于PHP相对路径问题的又一个问题。请容忍我,因为我找不到针对我特定需求的解决方案。
考虑以下目录树和文件:
[www]:
index.php
config.php
[webroot]:
home.php
index.php
需要home.php
,可以在webroot
中找到:
require('webroot/home.php');
home.php
需要config.php
,后者位于父目录中:
require('../config.php');
我的问题是,在本地开发环境(Ubuntu 14.04 LTS / 15.10)中无法运行此代码,但在生产环境中却可以完美运行。所有提到的环境都在运行 Apache 2 和 PHP 5。
奇怪的是,当我在我的 Vagrant 虚拟机(Ubuntu 12.04 LTS)中运行它并从主机访问时,它可以在本地正常运行。但现在,我不能在这里运行虚拟机。
那么,为什么这些环境的行为会如此不同?
这使我相信,一定有一种方法可以更改 PHP 解释相对路径的方式。我目前正在使用一个超过 6GB 的 PHP 项目,像上面的示例一样编写,并且我真的需要避免重写每个 include/require 语句(使用 dirname(__FILE__)
等),以及可能造成的 git 合并冲突。
编辑:我刚想起来我曾在这里提出过这个问题:PHP:包含已包含的文件
/var/www/html
,但我不确定这是否相关(问题中的路径都是虚构的),因为我只想知道如何改变相对路径的视角。我不知道如何阅读 .htaccess,但如果您需要,我可以将其包含在问题中。 - Gui Imamura/www
。在我的生产系统中,它指向/var/www/html
,而在我的开发系统中,它实际上是/home/user/Documents/project
(这是一个同步到vagrant机器的文件夹,它也将其视为/var/www/html
)。 - Gui Imamura