【问题标题】:PHP | how to get a path to a file without including folders outside of the root of my projectPHP |如何在不包括项目根目录之外的文件夹的情况下获取文件路径
【发布时间】:2017-01-20 15:01:52
【问题描述】:

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

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

哪个会尝试使用此 url 导入我的样式:

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);

【问题讨论】:

  • $layout_after = explode("/public", $layout_dir)[1] 。 "/";
  • 你的解决方案没问题。

标签: php path directory


【解决方案1】:

假设您正在寻找以“/packages”开头的路径部分,则以下正则表达式将可以:

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

然后 $matches[0] 包含您要查找的内容。

【讨论】:

  • 这个解决方案最适合我!!我刚刚也将服务器添加到路径中以增加一点趣味,使用以下命令: $row['assetPath'] = '//' 。 $_SERVER['HTTP_HOST'] 。 $pathMatches[0];谢谢!
【解决方案2】:

有不同的方法,但方法很简单:

<?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] . "/";
}

结果:

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 2016-01-17
    • 2010-10-30
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多