$_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?
то, что я нашел сегодня, после прочтения этого вопроса и продолжения моего googlesurf:
https://docs.joomla.org/How_to_find_your_absolute_path
<?php $path = getcwd(); echo "This Is Your Absolute Path: "; echo $path; ?>
работает на меня
Где находится файл, который вы используете? Если он находится в вашей общедоступной папке html, вы можете сделать echo dirname(__FILE__);
Предположим, что show_images.php
находится в папках, а корень сайта – public_html
, поэтому:
echo dirname(__DIR__); // prints '/home/public_html/' echo dirname(__FILE__); // prints '/home/public_html/images'
Всякий раз, когда вам нужна какая-либо информация о конфигурации, вы можете использовать phpinfo()
.
поместите anyfile в каталоги, которые вы хотите найти, в этом случае поместите «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 script
/home/user/public_html/test/another-dir/test.php
поэтому $ pathToRoot будет
$pathToRoot => "../../../"
Это тот, кого ты хочешь?
Из любопытства, почему бы вам просто не использовать URL-адрес для указанной папки?
Предполагая, что папка никогда не изменяет местоположение, это был бы самый простой способ сделать это.
с функцией preg_replace, чтобы найти абсолютный путь от __FILE__
вы можете легко найти что-нибудь домашнее. Здесь короткий мой код:
$ path_image_you_want = preg_replace ('# / public_html /([^/]+?)/.*#', '/ public_html / $ 1 / images ",
__FILE__
);
Это очень старый, но я наткнулся на него, и это сработало для меня.
<?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/ ?>
Вы также можете использовать dirname в dirname, чтобы добраться туда, где вы хотите быть.
Пример использования:
Для Joomla модули всегда будут установлены в /public_html/modules/mod_modulename/
Таким образом, изнутри файла в папке модуля, чтобы добраться до установочного корня Joomla на любом сервере, я мог бы использовать: $path = dirname(dirname(dirname(__FILE__)));
То же самое касается WordPress, где плагины всегда находятся в wp-content/plugins/
Надеюсь, это поможет кому-то.