我的PHP项目中有这个文件夹结构.(如eclips所示)
-MySystem
+Code
+Data_Access
-Public_HTML
+css
+js
+Templates
-resources
Run Code Online (Sandbox Code Playgroud)
当我尝试这个代码
echo $_SERVER['DOCUMENT_ROOT']
Run Code Online (Sandbox Code Playgroud)
输出是
d:/工作区
如何在不对MySystem文件夹名称进行硬编码的情况下获取system()的RootDirectory路径?
Pra*_*sha 139
对于PHP> = 5.3.0试试
PHP 魔术常数.
__DIR__
Run Code Online (Sandbox Code Playgroud)
并使你的道路相对.
对于PHP <5.3.0试试
dirname(__FILE__)
Run Code Online (Sandbox Code Playgroud)
Arm*_*min 63
当你这么说的时候
$_SERVER['DOCUMENT_ROOT']
Run Code Online (Sandbox Code Playgroud)
包含此路径:
D:/workspace
Run Code Online (Sandbox Code Playgroud)
那D:就是你在找什么,不是吗?在这种情况下,您可以通过斜杠爆炸字符串并返回第一个:
$pathInPieces = explode('/', $_SERVER['DOCUMENT_ROOT']);
echo $pathInPieces[0];
Run Code Online (Sandbox Code Playgroud)
这将输出服务器的根目录.
更新:当您使用常量DIRECTORY_SEPARATOR而不是硬编码斜杠('/')时,此代码也可以在Windows下运行.
更新2:在$_SERVER全局变量并不总是可用的.例如,在命令行(cli)上.所以你应该使用__DIR__而不是$_SERVER['DOCUMENT_ROOT'].__DIR__返回php文件本身的路径.
我想指出Wordpress处理这个问题的方式:
define( 'ABSPATH', dirname(dirname(__FILE__)) . '/' );
Run Code Online (Sandbox Code Playgroud)
由于Wordpress在整个网络上使用非常繁重,并且在本地工作正常,我对此方法非常信任.
小智 7
目前,PHP 本身并没有提供确定的获取项目根目录的方法。
但是您可以自己实现一个非常简单的方法,该方法将完全满足您的要求。
解决方案
在您的项目中创建一个新文件,比如说D:/workspace/MySystem/Code/FilesManager.php(使用最适合您的名称和路径)。然后,使用以下代码:
<?php
class FilesManager
{
public static function rootDirectory()
{
// Change the second parameter to suit your needs
return dirname(__FILE__, 2);
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以做到这一点,让我们说D:/workspace/MySystem/Code/a/b/c/Feature.php:
echo FilesManager::rootDirectory();
Run Code Online (Sandbox Code Playgroud)
预期的结果应该是:
"D:/workspace/MySystem"
Run Code Online (Sandbox Code Playgroud)
无论您的“功能”文件位于项目中的哪个位置,输出都将相同。
解释
dirname用于返回第一个参数的父目录。我们使用魔法常数 __FILE__来给出它FilesManager.php的路径。第二个参数告诉在层次结构中上升多少次。在这种情况下,我们需要做两次,但这实际上取决于您将文件放在层次结构中的位置。如果你只需要起来一次,你可以省略第二个参数,这意味着文件位于根目录。但是,您可以__DIR__直接返回。
无论根目录位于服务器上的哪个位置,此解决方案都可以保证有效。除非您最终将实用程序类移动到层次结构中的其他位置。
附加说明
由于以下原因(根据此答案),我会避免使用 DOCUMENT_ROOT :
dirname(__FILE__)
Run Code Online (Sandbox Code Playgroud)
很有用,但会获取相对于当前文件 URL 的当前路径,以防万一您位于远离根目录的其他目录中,例如 include,并且您需要从根目录获取文件夹,您可以使用整数参数 2 将向上 1 级,依此类推
echo dirname(__FILE__, 2);
Run Code Online (Sandbox Code Playgroud)
前
C:\larragon\www\x\includes\reports\charts
后
C:\larragon\www\x\reports\charts
reports 是根目录 x 内的文件夹