Re: best way to properly build an include path *regardless* from where I am calling the include?

From: Date: Tue, 07 Jul 2009 01:15:03 +0000
Subject: Re: best way to properly build an include path *regardless* from where I am calling the include?
References: 1 2 3 4 5 6  Groups: php.general 
Request: Send a blank email to php-general+get-294979@lists.php.net to get a copy of this message
I want something that will work for calling an include from any file that lives n levels deep.
That's where you have to define a variable (or constant) that tells the system where the web root is located, and then use that to determine where you are in relation to that. For example: <?php function relate_path($me,$root = '/home/pilotpig/public_html') { if(preg_match('/\/.*\.[a-z0-9]{2,5}$/Ui',$me)) { // If a file with extension 2-5 alphanum chars
       $me = dirname($me); // Strip the filename
       // Then loop through the correct number of times.
       for($i=0;$i<(substr_count($me,'/') - substr_count($root,'/'));$i++) {
           $me = dirname($me);
       }
       return $me; // Returns the resulting path.
} return false; // If we were unable to get the path. } /* Then use it as follows, presuming this file is named /home/user/public_html/web/home.php */ if(($path = relate_path(__FILE__)) !== false) { include($path.'/include/config.php'); } else { // Handle the error for the incorrect inclusion attempt. } ?> Voila!
Also, what is the difference between a path that starts with "/", versus the same path but that does not have that leading "/", or that same path but prefixed with "./"? I.e., this: /somepath/includes/file.php
.... is a true (absolute) path.
versus this: somepath/includes/file.php
.... is a relative path from wherever the file is called.
versus this: ./somepath/includes/file.php
.... is a relative path from the CWD/PWD (Current Working Directory/Present Working Directory). P.S. - The function is untested, just rattled off from my brain while I cook dinner, so if it doesn't work, at least you should get the gist of where I'm going.... but try it anyway. ;-P
Dan I love to see smart hacks in action! ..and I believe I get what you are doing. I am just amazed that there is not a SIMPLE (one-liner) reliable way of just saying "document root" without a complex function like that. I mean what we need here is a global include path for the shared-hosted user .. an include_path that can be set for the virtual server user and it 'sticks' (does not have to be set on every page load). I think I'll let this all go for now... I have a lot of basics to cover before I trip out too much in any one area. I'm going to need the time and brain juice for some 'real' issues later ;-) -G

« previous php.general (#294979) next »