2012-06-07 69 views
10

我严重依赖$_SERVER["DOCUMENT_ROOT"]来获得绝对路径。但是,这对于URL不指向根目录的站点不起作用。PHP在服务器中获取网站根目录绝对URL?

我夹中存储的网站如:

  • site1的
  • 站点2
所有直接在根里面

。有没有办法在当前站点根目录的服务器中获取路径?

它应该返回:

/var/chroot/home/content/02/6945202/html/site1 // If the site is stored in folder 'site1' 
    /var/chroot/home/content/02/6945202/html // If the site is stored in the root 
+0

你想从域的根目录获取文档的根目录吗?因为,你在做什么其实是对的! –

+0

我想获得每个站点托管的服务器上的绝对路径。 – lisovaccaro

+0

好的,'$ _SERVER [“DOCUMENT_ROOT”]'实际上是这样,但是你得到了什么?你已经给了你想要的。我想你需要Apache的帮助,因为只有Apache知道哪个是虚拟主机及其地址。得到它? –

回答

11

你可以简单地添加到dirname($_SERVER['SCRIPT_NAME'])$_SERVER['DOCUMENT_ROOT']

更新

该网站似乎是目录“安装”文件夹,所以SCRIPT_NAME显然会/

因此,要做到这一点,您必须使用__DIR__dirname(__FILE__)来找出您的脚本在文件系统中的位置。

更新2

没有单一的index.php控制器为整个网站,这样就不能工作。

以下表达式会执行一个字符串“subtraction”来查找公共路径。你有一个已知的前缀(文档根),一个未知的(根文件夹)和一个已知的后缀(脚本路径),所以要找到前两个,你需要完整的绝对路径(__FILE__)并减去已知的后缀:

substr(__FILE__, 0, -strlen($_SERVER['SCRIPT_NAME'])); 

如果包含的文件需要此值,则必须在包含相关脚本之前将其存储在常量中。 。

+0

我试着在site2 index.php中运行它,它返回:'/'。我需要它指向:'/ var/chroot/home/content/02/6945202/html/site1'这是我的网站的根。 – lisovaccaro

+0

看起来你的服务器是chrooted的,这可能会影响传递给PHP的变量。该路径是您的服务器帐户根目录吗? – Sp4cecat

+0

我想你忘了提到该网站被称为'http:// www.example.org/index.php';在这种情况下,您必须使用'__DIR__'或'dirname(__ FILE __)'并将其保持为常量,以便包含的脚本也可以使用它。 –

1

对于未来的Google,这也为我工作

substr(substr(__FILE__, strlen(realpath($_SERVER['DOCUMENT_ROOT']))), 0, - strlen(basename(__FILE__))); 
+3

您的解决方案基于'$ _SERVER ['DOCUMENT_ROOT']',它已被证明是平台依赖的:在某些情况下,它是通过服务器根目录的路径编译的,在其他情况下是通过站点根目录,所以它不安全。我认为最好的方法是依靠'$ _SERVER ['SCRIPT_NAME']'和$ _SERVER ['SCRIPT_FILENAME']'。 –

1

只需使用getcwd()当前脚本是在文件夹的当前服务器绝对路径。

你可以在上面定义常量的网站,以便网站的其他部分可以依靠这条路径。

define('MY_SERVER_PATH', getcwd()); 
0

使用下面的方法来从服务器设置

str_replace($_SERVER['DOCUMENT_ROOT']."/",$_SERVER['PHPRC'],$_SERVER['REAL_DOCUMENT_ROOT']) 

或使用getcwd()得到绝对根URL。它得到你的应用程序的当前工作目录

+0

我的标准PHP 7(Fedora 25)安装中不存在'PHPRC'和'REAL_DOCUMENT_ROOT'。 – carefulnow1