【问题标题】:How to get the absolute path to the public_html folder?如何获取 public_html 文件夹的绝对路径?
【发布时间】:2011-08-30 02:02:31
【问题描述】:
$_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 文件夹的路径?

【问题讨论】:

  • 问你真正想回答的问题,而不是你认为会回答的问题。
  • 尝试执行var_dump($_SERVER); 看看定义了什么。
  • @Ignacio 我做了一些更改。现在问题更清楚了吗?
  • 没有。你所做的只是把自己埋得更深。

标签: php public-html


【解决方案1】:

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

function getRoot($root = "public_html") {
    return explode($root, getcwd())[0].$root."/";
}

【讨论】:

    【解决方案2】:
    <?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/
    

    【讨论】:

      【解决方案3】:

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

      使用示例:

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

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

      Wordpress 也是如此,插件始终位于 wp-content/plugins/

      希望这对某人有所帮助。

      【讨论】:

      • 并不是说在 wordpress 插件中可以在不同的文件夹中。
      • 确实如此。但是,上述解决方案仍然有效,只要 plugins 目录是根目录下的一个目录。
      【解决方案4】:

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

      echo dirname(__DIR__); // prints '/home/public_html/'
      echo dirname(__FILE__); // prints '/home/public_html/images'
      

      【讨论】:

      • 这是正确答案。必须正确指定 php 的路径。
      【解决方案5】:

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

      <?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/
      ?>
      

      【讨论】:

        【解决方案6】:

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

        https://docs.joomla.org/How_to_find_your_absolute_path

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

        为我工作

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

              将任何文件放在您要查找的目录中,在这种情况下,将 '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 => "../../../"
              

              这是你想要的吗??

              【讨论】:

              • 我无权访问服务器。所以我不能放置一个“根”文件。我写的是一个插件。不管怎么说,还是要谢谢你。我想知道的是是否可以仅使用 php 代码来做到这一点。令人惊讶的是,没有简单的方法可以做到这一点。
              • 那么也许你可以通过在你想在图像中找到的文件上附加'../'来进行疯狂的猜测......比如“../images/this.jpg”......如果它失败,尝试“../../images/this.jpg”等等..一旦你得到它..它可以使用..
              【解决方案10】:

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

              http://www.mysite.com/images

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

              【讨论】:

              • 因为不能通过 URL 写入文件。
              • 我想获取路径“/home/user/public_html/images”。问题是“用户”可以改变。所以不能硬编码。(public_html目录的名字也可以不一样)
              • @Ignacio: 加油!我没有意识到这一点。
              • @Can't Tell:您有权访问用户名吗?没有它,你问的问题看起来是不可能的,有了它,你不能只写“/home/$user/public_html/images”吗?
              • @Can't tell: 在这种情况下,您无法做到这一点。服务器上有几个“图像”文件夹是什么?你将如何决定哪一个是正确的?我强烈怀疑您正在尝试解决错误的问题。您的软件是否会安装在您无法控制的各种服务器上?创建安装脚本并使用它来配置文件夹路径,方法是创建文件夹或要求用户提供现有文件夹的路径。如果它在您可以控制的服务器上,只需创建您需要的文件夹并使用它们。不要猜测。
              【解决方案11】:

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

              【讨论】:

              • 我不知道它会在哪里运行。那就是问题所在。我想让它便携。它应该可以在任何地方运行它,但我需要访问的文件夹将在 public_html 文件夹中。
              • 会一直命名为公共 HTML 吗?因为你可以这样做:$folder = dirname(__FILE__); while (basename($folder) != 'public_html') $folder = dirname($folder); 这会让你到达那里,但如果你每次页面加载时都运行它?这很糟糕 - 另外,它需要进行一些检查以确保您不会无限循环(如果从未找到 public_html)。 ps 抱歉延迟回复..我只看到这条评论):
              猜你喜欢
              • 2015-09-09
              • 2019-01-17
              • 1970-01-01
              • 1970-01-01
              • 2019-01-17
              • 2019-12-17
              • 2012-04-24
              • 2023-03-15
              相关资源
              最近更新 更多