3

In PHP how can I get the site folder path anywhere in the site?

ex: /var/www/sitename

this is what I got so far:

$r1 = $_SERVER['document_root']          //  = /var/www
$r2 = __DIR__                           //  = /var/www/sitename/view/folder/subf
$r3 = str_replace($r1 . '/', '', $r2);  //  = sitename/views/folder/subf
$arr = explode('/', $r3);               //  = array (sitename, views, folder ...)
$sitepath = $r1 . '/' . $arr[0]         //  = /var/www/sitename

Is there any other easiest way?.

EDIT: there are many site copies in different servers with different names, could be site1 (/var/www/site1) or sitexx347(/var/www/sitexx347) or onemoresite.com (public_html/onemoresite), and I want to know it anywhere in the website so instead of calling

require_once '../../../../../../config.php';

or

require_once $_SERVER['DOCUMENT_ROOT'] . '/IveNoIdeaWhatTheNameIs/config.php';

I can do this:

require_once $sitepath . 'config.php';

I repeat, I have no idea what the site name is.

EDIT 2: the way I do it now works perfect, I was just trying to know an easiest way. Actually this can be shorten to do it like this:

$r = explode('/', str_replace($_SERVER['DOCUMENT_ROOT'].'/', '', __DIR__));
$sitepath = $_SERVER['DOCUMENT_ROOT'] . '/' . $r[0];
4

3 回答 3

3

$_SERVER['DOCUMENT_ROOT']应该做的伎俩。正如手册中所说

当前脚本在其下执行的文档根目录,如服务器的配置文件中所定义。

您一定没有/var/www/sitename配置为根目录。

编辑:你有几种不同的方法,但我认为你所拥有的很好。确保您从explode()缩短的版本中获取第一个元素。

于 2013-07-23T17:19:09.247 回答
1

好吧,事情是要获取站点文件夹名称,无论脚本位于何处,无论站点名称是什么,无论项目位于何处(本地主机或在线),我都用谷歌搜索了它,但一无所获。似乎没有超级简单的方法可以做到这一点。
所以这是我的答案

$r = explode('/', str_replace($_SERVER['DOCUMENT_ROOT'].'/', '', __DIR__));
$sitepath = $_SERVER['DOCUMENT_ROOT'] . '/' . $r[0];

第一行返回一个数组,其中包含此代码所在的脚本路径,以“/”分隔,不包含文档根目录(public_html 或 /wamp/www 或 /var/www)
第二行将 document_root 与第一个数组元素连接起来这是站点文件夹名称(不是主机名——在这种情况下,这不是我们想要的)

所以,你可以让它在网站内的任何地方工作,

ex1 (linux local) : 在 site1/controller/controller.php 你会得到 /var/www/site1

ex2(服务器在线):在 sitename/views/index.php 你会得到 /public_html/sitename
                 ** 主机名可以是 differentname.com 并且它不会改变。

ex3 (Windows / wamp) 在 site2/classes/other/sub.php 你会得到 C:/wamp/www/site2

于 2013-07-24T13:28:45.600 回答
0

将一些 php 文件放在您想要的位置并获取 $name = dirname(FILE);

http://php.net/manual/en/function.dirname.php

于 2013-07-23T17:20:42.007 回答