在PHP中,如何在站点中的任何位置获取站点文件夹路径
例如:/var/www/sitename
这就是我目前得到的:
$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
还有其他最简单的方法吗?。
EDIT:在不同的服务器上有很多不同名称的站点副本,可能是site1(/var/www/site1)或sitexx347(/var/ww/witexx347)或onemoresite.com(public_html/onemoresite),我想知道它在网站上的任何地方,所以不要调用
require_once '../../../../../../config.php';
或
require_once $_SERVER['DOCUMENT_ROOT'] . '/IveNoIdeaWhatTheNameIs/config.php';
我可以做到:
require_once $sitepath . 'config.php';
我重复一遍,我不知道网站名称是什么。
编辑2:我现在做这件事的方式很完美,我只是想知道一个最简单的方法。事实上,这可以缩短为这样做:
$r = explode('/', str_replace($_SERVER['DOCUMENT_ROOT'].'/', '', __DIR__));
$sitepath = $_SERVER['DOCUMENT_ROOT'] . '/' . $r[0];
$_SERVER['DOCUMENT_ROOT']
应该能做到这一点。如手册所述
当前脚本在其下执行的文档根目录,如服务器的配置文件中所定义。
不能将/var/www/sitename
配置为根目录。
编辑:你有几种不同的方式,但我认为你所拥有的一切都很好。请确保您在缩短的版本中从explode()
获得了第一个元素。
问题是获取站点文件夹名称,无论脚本位于何处,无论站点名称是什么,无论项目位于何处(本地主机或在线),我都在谷歌上搜索了它,但一无所获。似乎没有一种非常简单的方法可以做到这一点。
这是我对的回答
$r = explode('/', str_replace($_SERVER['DOCUMENT_ROOT'].'/', '', __DIR__));
$sitepath = $_SERVER['DOCUMENT_ROOT'] . '/' . $r[0];
第一行返回一个数组,其中该代码所在的脚本的路径用"/"分隔"没有文档根目录(public_html或/wamp/www或/var/www)
第二行将document_root与第一个数组元素连接起来,该数组元素是站点FOLDER名称(不是主机名,在本例中这不是我们想要的)
因此,你可以在网站内的任何地方使用
ex1(linux本地):在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
将一些php文件放在您想要的位置,并获得$name=dirname(file);
http://php.net/manual/en/function.dirname.php