How to get the absolute path to the public_html folder?
$_SERVER['DOCUMENT_ROOT']
returns
/usr/local/apache/htdocs/
is there a way to get
/home/user/public_html/
The problem is that I have to write a script which can be in the public_html folder or a sub-folder of the public_html folder. The script should save uploaded files into a folder inside public_html directory(say images).开发者_如何学运维 In other words let us say that my file is test.php and the path to it is
/home/user/public_html/test/test.php.
And there is a folder
/home/user/public_html/images
where files uploaded via test.php have to be saved. I don't know where the test.php file will be run. For example it can be at the path
/home/user/public_html/test/another-dir/test.php
How do I get the path to the images folder without knowing where the test.php file will be?
something I found today, after reading this question and continuing on my googlesurf:
https://docs.joomla.org/How_to_find_your_absolute_path
<?php
$path = getcwd();
echo "This Is Your Absolute Path: ";
echo $path;
?>
works for me
Where is the file that you're running? If it is in your public html folder, you can do echo dirname(__FILE__);
Let's asume that show_images.php
is in folder images
and the site root is public_html
, so:
echo dirname(__DIR__); // prints '/home/public_html/'
echo dirname(__FILE__); // prints '/home/public_html/images'
put anyfile on the directories you wanted to find, in this case, place 'root' at public_html
/home/user/public_html/root <- note that 'root' is not a folder (you can use root.txt if u want)
And use this function
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.="../";
}
}
}
and get the value by calling it
$pathToRoot = findThis('root');
And it will return, for example the the dir of php script is
/home/user/public_html/test/another-dir/test.php
so the $pathToRoot will be
$pathToRoot => "../../../"
Is this the one you want??
Out of curiosity, why don't you just use the url for the said folder?
http://www.mysite.com/images
Assuming that the folder never changes location, that would be the easiest way to do it.
Whenever you want any sort of configuration information you can use phpinfo()
.
This is super old, but I came across it and this worked for me.
<?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/
?>
You just need to create an offset bypass to how far you want the backwards reading to go. So, we use getcwd()
to get the path and explode (split into array) to fetch the data between $root
and the ending of the path.
function getRoot($root = "public_html") {
return explode($root, getcwd())[0].$root."/";
}
<?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/
with preg_replace function to find absolute path from __FILE__
you can easily find with anything home user. Here short my code :
$path_image_you_want = preg_replace('#/public_html/([^/]+?)/.*#', '/public_html/$1/images",
__FILE__
);
You can also use dirname in dirname to get to where you want to be.
Example of usage:
For Joomla, modules will always be installed in /public_html/modules/mod_modulename/
So, from within a file within the module's folder, to get to the Joomla install-root on any server , I could use:
$path = dirname(dirname(dirname(__FILE__)));
The same goes for Wordpress, where plugins are always in wp-content/plugins/
Hope this helps someone.
精彩评论