30
$_SERVER['DOCUMENT_ROOT']

返回

/usr/local/apache/htdocs/

有没有办法得到

/home/user/public_html/

问题是我必须编写一个脚本,该脚本可以位于 public_html 文件夹或 public_html 文件夹的子文件夹中。该脚本应将上传的文件保存到 public_html 目录(例如图像)内的文件夹中。换句话说,让我们说我的文件是 test.php,它的路径是

/home/user/public_html/test/test.php. 

还有一个文件夹

/home/user/public_html/images 

必须保存通过 test.php 上传的文件。我不知道 test.php 文件将在哪里运行。例如它可以在路径

/home/user/public_html/test/another-dir/test.php

如何在不知道 test.php 文件在哪里的情况下获取 images 文件夹的路径?

4

11 回答 11

43

在阅读了这个问题并在我的 googlesurf 上继续之后,我今天发现了一些东西:

https://docs.joomla.org/How_to_find_your_absolute_path

<?php
$path = getcwd();
echo "This Is Your Absolute Path: ";
echo $path;
?>

为我工作

于 2012-05-02T15:51:20.150 回答
21

您正在运行的文件在哪里?如果它在您的公共 html 文件夹中,您可以执行echo dirname(__FILE__);

于 2011-05-21T03:59:11.697 回答
13

假设它show_images.php在文件夹中images并且站点根目录是public_html,所以:

echo dirname(__DIR__); // prints '/home/public_html/'
echo dirname(__FILE__); // prints '/home/public_html/images'
于 2016-05-03T13:47:22.860 回答
3

将任何文件放在您要查找的目录上,在这种情况下,将“root”放在 public_html

/home/user/public_html/root <- note that 'root' is not a folder (you can use root.txt if u want)

并使用此功能

function findThis($get){
    $d = '';
    for($i = 0; $i < 20; $i++){//this will try 20 times recursively on upper folder
        if(file_exists($d.$get)){
            return $d;
        }else{
            $d.="../";
        }
    }
}

并通过调用它来获取值

$pathToRoot = findThis('root');

它会返回,例如 php 脚本的目录是

/home/user/public_html/test/another-dir/test.php

所以 $pathToRoot 将是

$pathToRoot => "../../../"

这是你想要的吗??

于 2011-05-21T06:39:40.927 回答
2

每当您需要任何类型的配置信息时,您都可以使用phpinfo().

于 2011-05-22T00:35:55.077 回答
2

出于好奇,您为什么不直接使用上述文件夹的 url?

http://www.mysite.com/images

假设文件夹从不更改位置,那将是最简单的方法。

于 2011-05-21T04:48:46.837 回答
2

这是超级旧的,但我遇到了它,这对我有用。

<?php
//Get absolute path
$path = getcwd();
//strip the path at your root dir name and everything that follows it
$path = substr($path, 0, strpos($path, "root"));
echo "This Is Your Absolute Path: ";
echo $path; //This will output /home/public_html/
?>
于 2015-11-04T23:48:16.683 回答
1

您只需要创建一个偏移旁路,以了解您希望向后读数走多远。因此,我们使用getcwd()获取路径并展开(拆分为数组)以获取路径之间$root和路径结尾之间的数据。

function getRoot($root = "public_html") {
    return explode($root, getcwd())[0].$root."/";
}
于 2020-09-26T07:56:24.053 回答
1
<?php

    // Get absolute path
    $path = getcwd(); // /home/user/public_html/test/test.php.   

    $path = substr($path, 0, strpos($path, "public_html"));

    $root = $path . "public_html/";

    echo $root; // This will output /home/user/public_html/
于 2019-08-29T13:57:35.703 回答
0

使用 preg_replace 函数查找绝对路径,__FILE__您可以轻松找到任何家庭用户。这里简短我的代码:

$path_image_you_want = preg_replace('#/public_html/([^/]+?)/.*#', '/public_html/$1/images", __FILE__);

于 2013-02-10T02:46:02.497 回答
0

您也可以在 dirname 中使用 dirname 来到达您想去的地方。

使用示例:

对于 Joomla,模块将始终安装在/public_html/modules/mod_modulename/

因此,从模块文件夹内的文件中,要访问任何服务器上的 Joomla install-root ,我可以使用: $path = dirname(dirname(dirname(__FILE__)));

Wordpress 也是如此,插件总是在wp-content/plugins/

希望这可以帮助某人。

于 2016-07-06T14:17:28.960 回答