【问题标题】:get the main site folder path in php在php中获取主站点文件夹路径
【发布时间】:2013-07-24 21:28:45
【问题描述】:

在 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

还有其他最简单的方法吗?

编辑:在不同的服务器中有许多不同名称的站点副本,可能是 site1 (/var/www/site1) 或 sitexx347(/var/www/sitexx347) 或 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];

【问题讨论】:

  • 查看我对这个问题的回答:stackoverflow.com/questions/17814932/… 看看 site_config.php 代码是否有帮助。
  • 定义“站点文件夹路径”是什么意思?
  • @Maximus2012 :实际上这是我想做的事情之一,无论您在站点的哪个位置,都可以调用 require_once($sitepath . '/site_config.php');
  • 但是为了使配置文件正常工作,您不需要在某处定义 $sitepath 吗?就我而言,我在配置文件本身中定义了 $sitepath 的等效项。
  • 哦,拜托,问题很清楚,这正是我要问的

标签: php


【解决方案1】:

$_SERVER['DOCUMENT_ROOT'] 应该可以解决问题。正如the manual中所说的

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

您不能将/var/www/sitename 配置为根目录。

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

【讨论】:

  • 在你的情况下,当你浏览你的网站时,你必须做 www.yoursite.com/sitename - 这就是你想要的吗?
  • 我想知道主站点文件夹的相对路径,无论站点中的“DEEP”如何位于php脚本中
  • 从你的问题来看,听起来你并不想要相对路径。好像你想要绝对路径。
  • 对不起,你是对的,我编辑了问题,请看一下
  • 哦,我明白了。你将不得不做一些你现在正在做的事情。你有几种不同的方法,但我认为你所拥有的很好。确保您在缩短版本中从 explode() 获取第一个元素。
【解决方案2】:

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

$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

【讨论】:

    【解决方案3】:

    将一些 php 文件放在你想要的地方并得到 $name = dirname(FILE);

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

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 2019-07-13
      • 2011-10-29
      • 2015-06-15
      • 2023-03-31
      • 2014-02-12
      • 2017-04-03
      • 2019-01-23
      • 2017-12-24
      相关资源
      最近更新 更多