如何在require中使用根路径?

3

我在一个网站中有一个私人部分,文件夹结构如下

www.site.com/privatePath/secretFolder/login.php

接下来是一些子文件夹,例如

www.site.com/privatePath/secretFolder/grandmasRecipes/applePie.php

登录页面旁边有一个共享的functions.php文件。

www.site.com/privatePath/secretFolder/functions.php(创建$connection,mysql等)

我有各种子文件夹和文件想要连接到functions.php,其中一些是动态创建的,因此解决方案应该可以从任何文件/文件夹位置工作。

只是为了澄清:

由于相同的文件可能在不同的文件夹中被调用,所以我希望它调用functions.php文件而不是在文件位置之处,而是相对于根文件夹。因此,在没有相对 ../ 等参考的情况下。

我的问题是: 如何从网站中的任何文件访问必需的php文件?


动态生成的PHP文件听起来像是一个非常糟糕的主意。 - Phil
@Phil 完全正确。这是因为菜单、子菜单和页面链接是通过文件目录创建的。问题在于每个页面都需要创建会话。 - EnglishAdam
尽管我认为依赖于DOCUMENT_ROOT是一个坏主意(首先,如果您的HTTP服务器不设置该属性,它将无法工作),但我不明白为什么您的代码不起作用。您确定您的applePie.php脚本第4行没有require 'functions.php';吗? - Phil
1
@Phil,我检查了1000次拼写,停止“解决”问题并询问stackoverflow,回到我的IDE页面后发现我一直在编辑旧版本的副本,烦死了。对不起,人类错误,对不起stackoverflow和感谢Phil。 - EnglishAdam
2个回答

4

我的建议是永远不要依赖于任何外部路径配置(例如DOCUMENT_ROOT)。相反,使用与当前脚本相关的路径...

来自login.php

require_once __DIR__ . '/functions.php';

From grandmasRecipes/applePie.php

require_once __DIR__ . '/../functions.php';

请查看http://php.net/manual/language.constants.predefined.php#constant.dir


另一种方法是设置当前环境的include_path。您可以在文档根目录中的.user.ini文件中进行此操作。

; /home/cpanelLogIn/public_html/.user.ini

include_path="/home/cpanelLogIn/public_html/:."

那么您可以简单地使用。
require_once 'privatePath/secretFolder/functions.php';

任何地方


谢谢Phil,不幸的是我无法保证文件生成后会被称为哪个文件夹。因此我需要一个基于根目录的解决方案。 - EnglishAdam
@Gamemorize 我完全不知道那是什么意思。 - Phil
我的意思是,由于同一文件可能在不同的文件夹中被调用,我希望它调用functions.php文件不是从文件所在的位置开始,而是相对于根文件夹。 - EnglishAdam
@Gamemorize 我已经添加了另一种选择。 - Phil
请在您的回答中添加“DOCUMENT_ROOT将起作用,但您有保留意见,我将从我的问题中删除它”。 - EnglishAdam

0

另一种解决方案:

require ( $_SERVER['DOCUMENT_ROOT'] . "/privatePath/secretFolder/functions.php");

将从站点中的任何页面访问functions.php文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接