【问题标题】:Referring to the root directory参考根目录
【发布时间】:2014-11-05 13:46:46
【问题描述】:

在我开始之前,这个问题之前可能已经被问过,但我要么不知道该输入什么才能具体找到它,这是一个稍微具体一点的案例。

我正在开发一个具有许多动态关系的网站,其中一些位于每个 php 文件的开头,有一行 require("global.php"); 执行名称所述的操作,其中包括 css 文件和其他任何内容在根级别找到。然而问题是,在进入另一个目录时,该文件的链接被破坏了。

传统上我所做的 (这是一个绝对愚蠢的初学者解决方法) 是在调用 $up 之前创建一个变量,其中包含字符串 '../',这取决于如何重复出现该文件来自根目录的许多目录。所以这条线会出现require($up."global.php");

我已经意识到这是多么愚蠢,并试图找到解决方法。其中之一是使用变量$_SERVER['DOCUMENT_ROOT'] 打印出根目录,但它不能 100% 工作的原因是因为 a) 我正在本地机器上开发网站,其中网站的“根”位于development 位于服务器上的子目录中,b) 它根据驱动器上从 D:\ 开始的位置返回整个路径,并以这种方式工作,我不太喜欢使用它开发网站,如果可能,宁愿保留在 Web 服务器的托管目录中。

所以,根据我的解释,有没有一种简单的方法可以在一个短字符串中获取网站的根位置(无论项目是在子目录中还是 Web 服务器的真正根目录中)无论目录级别如何,都非常容易附加到每个 php 文件中每个文件引用的开头?

谢谢!

【问题讨论】:

  • @Gudgip 接受的答案给我的是来自驱动器根目录的目录。在 Mac 上,这是/Applications/XAMPP/xamppfiles/htdocs/website3。有没有办法将它从website3 开始,而不使用任何其他代码来修改字符串?另外,我将如何将其存储为常数?常量对我来说是新的,我不完全理解它们是如何工作的
  • 嗯,这样做的一种方法是将 index.php 文件所在的目录保存在常量中(或将其输出到文件或其他文件中),然后在所有其他文件中使用它, 所以在你的其他文件中:require ($MY_ROOT.'/relative/path/to/include/file.php') 这样看起来是相对的,但实际上是绝对的。
  • 尽管如此,它在子目录中开始的原因纯粹是为了本地开发。当需要将其移至主网络服务器时,它将位于网络服务器的真正根目录中,这将打破这种方法。

标签: php reference directory document-root


【解决方案1】:

假设你有以下目录:

 /srv/website/index.php
 /srv/website/lib/functions.php

然后你可以这样做:

define("MY_ROOT",     $_SERVER['DOCUMENT_ROOT']);

并在每个(包含的)文件中相对使用它:

require (MY_ROOT . "lib/functions.php" );

【讨论】:

  • 它几乎可以工作,但是它没有说明所谓的“根”实际上是真正根中的子目录。有没有办法让它工作,以便在将其传输到托管网络服务器时,网站根目录成为真正的根目录,它仍然可以在不破坏任何链接的情况下工作?
  • 您可以手动调整常数。 (添加..\ )您只需要编辑define,还是想要一个自动解决方案?因为那会更难 imo。
  • 这不是意味着我必须在每个文件中编辑define 吗?从某种意义上说,它会破坏取代在每个文件的开头有一个 $up 变量的想法
猜你喜欢
  • 2013-01-03
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多