在PHP中从文档根目录中减去路径

4

我的当前文档根目录是这样的(通过 $_SERVER['DOCUMENT_ROOT']):

/var/www/html/clients/app/folder

我需要生成一个文件夹向上的路径:
/var/www/html/clients/app

我该如何实现这个功能?

我之前曾提出过这个问题:动态查找路径,有更好的方法吗?

然而,我遇到了以下无法解决的情况:

  • 执行脚本位于此处:root/f1/f2/f3/f4/f5/file.php。
  • 该脚本包含另一个脚本,位于此处:root/f6/file2.php。

在file2.php中,我需要使用以下代码才能使其正常工作:

$base_path = dirname(realpath("../../../../do_not_remove.txt"));

在理论上,根据其位置,应该是这样的:
$base_path = dirname(realpath("../do_not_remove.txt"));

实际上,在这种情况下,可以有一个全局可用区域来传递这些数据。然而,在这个继承的项目中,没有这样的区域,因此我在需要它的地方重复使用。

更新 #1

根据答案,这似乎非常好用:realpath($_SERVER['DOCUMENT_ROOT']."/../../");

3个回答

5

你可以使用 $_SERVER['DOCUMENT_ROOT'] ."/../",虽然看起来不太美观

或者更加正确的方式是 dirname( $_SERVER['DOCUMENT_ROOT'] ),我认为这应该可以工作


哈,我没有剩余的投票了,否则我也会在正确答案的精神下为你投票。 - kalpaitch
@Ray 看看我的更新,对似乎有效的想法有什么看法?还有,我应该翻转一下来看谁得到了答案吗? :) - TechFanDan
嗯,现在有点困惑了,但是基本上你应该得到 realpath($_SERVER['DOCUMENT_ROOT']."/../../"); 并返回与 dirname($_SERVER['DOCUMENT_ROOT']."/../"); 相同的路径。 - kalpaitch
@Ray,当我使用realpath时,为什么需要“减去”一个额外的路径? - TechFanDan
从php手册中:realpath - 返回规范化的绝对路径名;dirname - 返回父目录的路径。这都与“parent”有关。 - kalpaitch

3
$path = $_SERVER['DOCUMENT_ROOT']."/../";

2

Using explode(), array_pop() and implode() :

<?php

//$path = $_SERVER['DOCUMENT_ROOT'];
$path = "/var/www/html/clients/app/folder";
$tmp = explode("/", $path);
array_pop($tmp);
$path_up = implode('/', $tmp);
echo $path_up; //output: /var/www/html/clients/app

?>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接