Get Root Directory Path of a PHP project

后端 未结 9 830
醉酒成梦
醉酒成梦 2020-12-04 11:46

I have this folder structure in my PHP project. (this is as shown in eclips)

-MySystem
    +Code
    +Data_Access
    -Public_HTML
        +css
        +js
         


        
9条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-04 12:28

    Summary

    This example assumes you always know where the apache root folder is '/var/www/' and you are trying to find the next folder path (e.g. '/var/www/my_website_folder'). Also this works from a script or the web browser which is why there is additional code.

    Code PHP7

    function getHtmlRootFolder(string $root = '/var/www/') {
    
        // -- try to use DOCUMENT_ROOT first --
        $ret = str_replace(' ', '', $_SERVER['DOCUMENT_ROOT']);
        $ret = rtrim($ret, '/') . '/';
    
        // -- if doesn't contain root path, find using this file's loc. path --
        if (!preg_match("#".$root."#", $ret)) {
          $root = rtrim($root, '/') . '/';
          $root_arr = explode("/", $root);
          $pwd_arr = explode("/", getcwd());
          $ret = $root . $pwd_arr[count($root_arr) - 1];
        }
    
        return (preg_match("#".$root."#", $ret)) ? rtrim($ret, '/') . '/' : null;
    }
    

    Example

    echo getHtmlRootFolder();
    

    Output:

    /var/www/somedir/
    

    Details:

    Basically first tries to get DOCUMENT_ROOT if it contains '/var/www/' then use it, else get the current dir (which much exist inside the project) and gets the next path value based on count of the $root path. Note: added rtrim statements to ensure the path returns ending with a '/' in all cases . It doesn't check for it requiring to be larger than /var/www/ it can also return /var/www/ as a possible response.

提交回复
热议问题