Как получить абсолютный путь к папке public_html? - PullRequest
24 голосов
/ 21 мая 2011
$_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?

Ответы [ 9 ]

36 голосов
/ 02 мая 2012

что-то, что я нашел сегодня, после прочтения этого вопроса и продолжения моего поискового запроса:

https://docs.joomla.org/How_to_find_your_absolute_path

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

работает для меня

20 голосов
/ 21 мая 2011

Где находится файл, который вы запускаете? Если он находится в вашей общедоступной папке html, вы можете сделать echo dirname(__FILE__);

9 голосов
/ 03 мая 2016

Предположим, что show_images.php находится в папке images, а корень сайта - public_html, поэтому:

echo dirname(__DIR__); // prints '/home/public_html/'
echo dirname(__FILE__); // prints '/home/public_html/images'
3 голосов
/ 22 мая 2011

Всякий раз, когда вам нужна какая-либо информация о конфигурации, вы можете использовать phpinfo().

3 голосов
/ 21 мая 2011

поместите любой файл в каталог, который вы хотите найти, в этом случае поместите 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');

И он вернется, например, сценарий dir php будет

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

, поэтому $ pathToRoot будет

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

Isэто тот, который вы хотите ??

2 голосов
/ 21 мая 2011

Из любопытства, почему бы вам просто не использовать URL для указанной папки?

http://www.mysite.com/images

Если предположить, что папка никогда не меняет расположение, это будет самый простой способсделать это.

1 голос
/ 05 ноября 2015

Это супер старый, но я сталкивался с этим, и это работало на меня.

<?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/
?>
0 голосов
/ 06 июля 2016

Вы также можете использовать dirname в dirname, чтобы попасть туда, где вы хотите быть.

Пример использования:

Для Joomla модули всегда будут установлены в /public_html/modules/mod_modulename/

Итак, из файла в папке модуля, чтобы получить доступ к установочному корню Joomla на любом сервере, я мог бы использовать: $path = dirname(dirname(dirname(__FILE__)));

То же самое касается Wordpress, где плагины всегда находятся в wp-content/plugins/

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 10 февраля 2013

с функцией preg_replace для нахождения абсолютного пути от __FILE__ вы можете легко найти с любым домашним пользователем.Вот кратко мой код:

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

...