是否有一个受欢迎的方法来指定您的网站/应用程序的根文件夹,而不必诉诸这样的代码:
require '../../../../config/settings.php';
之前我使用过各种方法,我正在考虑的是在我的主机上设置一个环境变量,这样我就可以这样做了:
require getenv('PROJECT_ROOT') . '/config/settings.php';
但这对于有一个项目的系统来说真的是可行的,而且还有其他各种缺点,所以我想知道是否有更好的方法?
答案 0 :(得分:3)
如果您想要查看环境变量路径,可以从Apache vhost设置环境变量。查看Apache文档中的SetEnv和SetEnvIf。例如为给定apache vhost的所有传入请求提供环境变量:
SetEnv PROJECT_ROOT='/path/to/my/project'
e.g。要根据主机名更改环境变量的值:
SetEnvIf Host www.example.com PROJECT_ROOT='/path/to/example/com'
SetEnvIf Host www.example.org PROJECT_ROOT='/path/to/example/org'
其他选项包括自动加载和自举。 Autoloading适用于类,但不适用于您的示例之类的配置文件。良好的命名约定(例如PSR-0)将使类名称映射到文件名更加容易。 Bootstrapping涉及创建一个文件,您可以从所有脚本中包含这些文件,然后加载配置设置等内容。引导程序是设置自动加载的好地方。这样你的引导程序会在加载其他应用程序之前加载配置,而你只是认为它存在于你应用程序的其他地方。
答案 1 :(得分:0)
也许您可以使用以下脚本:
$_SERVER['DOCUMENT_ROOT'];
$currentDirectory = array_pop(explode("/", getcwd()));
但也比你更好,你可以参考这个问题:How can I get the "application root" of my URL from PHP?
答案 2 :(得分:0)
您可能希望使用引导程序加载所需的必要文件,以便后续文件只需要引导程序文件。
答案 3 :(得分:0)
在不知道您的代码是如何组织的情况下,我会说使用PHP的自动加载功能。 (http://php.net/manual/en/language.oop5.autoload.php)如果遵循正确的约定,您可以以编程方式将类名映射到从中加载它的路径。或者遍历目录树,直到找到匹配项。