Winston
Winston

Reputation: 76

Find filepath to public_html directory or it's equivalent using PHP

I'm creating a .php file that will be uploaded to the root directory of a server. I need that .php file to then figure out the path to the public_html folder or it's equivalent.

I need to do this because I want my .php file to be able to be uploaded to the root and used on any hosting account. Because many hosting companies use different file paths to the public_html folder or even call it something different, I'm trying to figure out how to detect it.

Preferable there is a server variable or easy test to do this. If not, the public_html folder will always contain a particular file so maybe I could search for this particular file and get the path that way. I'm just worried about a filename search being heavy on memory.

The .php file that is being executed is located inside the ROOT directory and needs to locate the public_html folder.

Like this: /home/user/file.php

needs to detect

/home/user/public_html/ or /home/user/var/www/ or /home/user/website.com/html/ etc.

Upvotes: 2

Views: 6173

Answers (3)

Mariano Soto
Mariano Soto

Reputation: 11

$pathToRoot = str_repeat('../', substr_count($_SERVER['SCRIPT_NAME'], '/')-1);

This code counts how many bars there are on $_SERVER['SCRIPT_NAME'] . Based on that, it will repeat the "../" pattern as many times as to take you to route.

Upvotes: 1

I found this website which provided me with the only good solution I have found after scouring the web...

$root = preg_replace("!${_SERVER['SCRIPT_NAME']}$!", "", $_SERVER['SCRIPT_FILENAME']);

The way this works is by getting the full path of the file and then removing the relative path of the file from the full path.

Upvotes: 0

Orangepill
Orangepill

Reputation: 24655

The challenge with this is that a server can have very many public_html's so outside of the context of a request there is no real way to find out what that is.

One thing that you might be able to do to get this information from a php script (if you know the url to get to the host) is to create a php file called docroot.php that looks like this.

<?php
    if ($_SERVER["REMOTE_ADDR"] == '127.0.0.1'){
            echo $_SERVER["DOCUMENT_ROOT"]; 
    }

Then within your file.php your would do something like

$docRoot = trim(file_get_contents("http://www.mydomain.com/docroot.php"));

This makes the assumption that the server can resolve to itself via the local interface by name.

Upvotes: 5

Related Questions