PHP |如何获取文件的路径,而不包括项目根目录之外的文件夹

时间:2017-01-20 15:01:52

标签: php path directory

我正在尝试在我的Concrete5站点的自定义块中加载CSS文件,但是我遇到了问题。我的css导入如下:

$layout_dir = dirname(__FILE__) . '/';
<link href="<?php echo $layout_dir; ?>form.css" rel="stylesheet"  type="text/css">

将尝试使用此网址导入我的样式:

http://pragmatic.dev/Users/brady/Code/pragmatic/public/packages/theme_caboodle/blocks/hero_block/form.css 

这个问题是我需要路径来排除:

/Users/brady/Code/pragmatic/public

我的路径的一部分,所以路径的基础是我的项目的根,如下所示:

/packages/theme_caboodle/blocks/hero_block/form.css

如何将导入设置为仅包含项目根目录中的路径?

/packages/theme_caboodle/blocks/hero_block/form.css

我还需要这条路径在放在服务器或其他任何人的本地机器上时不会中断。所以使用这个块的另一个用户我有不同的文件夹结构,因为他们将它从市场下载,所以我需要牢记这一点。

到目前为止,这是我的解决方案,但我发现它非常严重:

$baseDir =  getcwd() . '/';
$fullDir = dirname(__FILE__) . '/';
//use this path for importing
$blockDir = str_replace("$baseDir","",$fullDir);

2 个答案:

答案 0 :(得分:1)

假设您正在寻找以'/ packages'开头的路径部分,以下正则表达式将会执行:

$layout_dir = dirname(__FILE__) . '/';
preg_match('%/packages/.+%', $layout_dir, $matches);

然后$ matches [0]包含你要找的东西。

答案 1 :(得分:0)

有不同的方法,但有一个简单的方法:

<?php

$layout_dir = "http://pragmatic.dev/Users/brady/Code/pragmatic/public/packages/theme_caboodle/blocks/hero_block";

echo removeFromUrl($layout_dir, "/public", 1); // 0 = Left of /public, 1 = Right of /public

function removeFromUrl($mDir, $mStringToSplit, $mNumber){
    return explode($mStringToSplit, $mDir)[$mNumber] . "/";
}

结果:

enter image description here