【问题标题】:Require file including variable需要包含变量的文件
【发布时间】:2011-11-25 14:24:32
【问题描述】:

我目前正在使用以下代码在我的网页中包含一个文件:

require_once $_SERVER['DOCUMENT_ROOT'] . '/include/file.php';

但是,我现在已经编辑了我的系统,所以我将 URL 输入到根目录中的一个数据文件中,这使我的站点的其他部分起作用并允许我使用不同的目录。

简而言之,我在网站上使用启动页面,现在根目录是 /directory 而不是根目录,因此我的数据文件中的 URL 是 http://www.domain.com/directory

所以,我需要解决的是如何使用包含 URL 的数据文件中的变量将这一行指向目录

所以$_SERVER['DOCUMENT_ROOT'] 变得无关紧要,因为我需要从不再位于根目录中的数据文件中的变量中获取数据。

它需要是这样的:

require_once (variable from file a few directories back) + absolute path to file;

如果我需要使用与根目录不同的目录来构建站点,我也希望这行代码能够过时。

我希望这是有道理的!

【问题讨论】:

  • 唯一有意义的是有两个不同的变量;将您的基本 url 设置和本地文档根目录分开。
  • 不确定你在问什么。 file.php 现在是在 /directory/include/file.php,还是仍然在 /include/file.php?你能给我们一些你当前目录结构的真实例子,file.php在哪里,这个配置变量包含什么?
  • 感谢您的回复。但是,我通过一个 php 文件控制我的整个系统,并且我想保持这种状态。我知道可以使用 PHP 来实现这一点——我只需要一个熟悉 PHP 的人来帮助我编写这段代码! :)
  • 感谢您的回复 jwegner,是的,新路径是 /directory/include/file.php。我需要包含的变量位于/目录中。该变量包含指向包含变量的数据文件的 URL,即 $url = 'domain.com/directory' 再次感谢。

标签: php variables require require-once


【解决方案1】:

创建一个SITE_ROOT 并改用它。这样,它可以处理任何目录更改。

define('SITE_BASE', '/directory/');
define('SITE_ROOT', $_SERVER['DOCUMENT_ROOT'] . SITE_BASE);

然后您可以使用SITE_BASE 创建您的 URI:

<a href="<?php echo SITE_BASE ?>subdir/">link</a>

SITE_ROOT 用于访问系统上的文件:

require_once SITE_ROOT . 'include/file.php';

【讨论】:

  • 这听起来像是完美的解决方案!我将在哪里包含 SITE_ROOT 的数据?非常感谢!
  • 它必须是在每个页面上运行的第一行代码之一。因此,这最适合您的特定应用程序。
  • 我明白了。非常感谢。我现在就给它一个打击。再次感谢。
  • 不客气。乐意效劳。如果这是最佳答案,请单击复选标记:)
  • 它可以工作,但我需要能够使用 /directory/data.php 中的变量,其中包含它的绝对 URL (domain.com/directory/data.php)。我可以将您的代码添加到 data.php 文件中,它会解决我的问题,但是我必须更改指向该变量的大约 100 行其他代码。只是这一行 require_once 不起作用。再次感谢您的帮助,但如果您知道我如何做到这一点,我将非常感谢您的帮助。问候。
【解决方案2】:

您是否考虑在您的php.ini 文件中设置include_path?例如,我自己的php.ini 文件有include_path = ".:/path/to/web/root",这样我在包含它们时不用担心我的文件在哪里。

在您的情况下,您可能希望将其设置为 include_path = ".:/path/to/web/root/directory"。如果您不知道 Web 根目录的路径,只需运行 echo $_SERVER['DOCUMENT_ROOT']; 即可找到它。

此解决方案“面向未来”,因为您只需要更改 php.ini 值,一切都会到位。

【讨论】:

  • 感谢您的回复,Kolink。我没有使用 php.ini 文件。我还不是 PHP 专家 :( 我正在使用单个 .php 文件来控制我的所有页面。这听起来确实可以解决我的问题。我会进一步研究。非常感谢。跨度>
猜你喜欢
  • 2015-08-17
  • 1970-01-01
  • 2019-12-30
  • 1970-01-01
  • 2011-12-15
  • 2011-11-23
  • 1970-01-01
  • 2012-09-13
  • 2019-02-22
相关资源
最近更新 更多