Ответ 1
то, что я нашел сегодня, прочитав этот вопрос и продолжив свой googlesurf:
https://docs.joomla.org/How_to_find_your_absolute_path
<?php
$path = getcwd();
echo "This Is Your Absolute Path: ";
echo $path;
?>
работает для меня
$_SERVER['DOCUMENT_ROOT']
возвращает
/usr/local/apache/htdocs/
есть ли способ получить
/home/user/public_html/
Проблема в том, что я должен написать script, который может находиться в папке public_html или вложенной папке в папке public_html. script должен сохранять загруженные файлы в папку в каталоге 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
находится в папке images
, а корень сайта - 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-адрес для указанной папки?
Предполагая, что папка никогда не меняет местоположение, это был бы самый простой способ сделать это.
Это супер старый, но я наткнулся на него, и это сработало для меня.
<?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/
?>
с функцией preg_replace, чтобы найти абсолютный путь от __FILE__
, вы можете легко найти любой домашний пользователь. Здесь короткий мой код:
$path_image_you_want = preg_replace ('#/public_html/([^/]+?)/.*#', '/public_html/$1/images ",
__FILE__
);
Вы также можете использовать dirname в dirname, чтобы добраться туда, где вы хотите быть.
Пример использования:
Для Joomla модули всегда будут установлены в /public_html/modules/mod_modulename/
Итак, изнутри файла в папке модуля, чтобы добраться до установочного корня Joomla на любом сервере, я мог бы использовать:
$path = dirname(dirname(dirname(__FILE__)));
То же самое относится к Wordpress, где плагины всегда находятся в wp-content/plugins/
Надеюсь, это поможет кому-то.