By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,825 Members | 1,270 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,825 IT Pros & Developers. It's quick & easy.

relative include paths? What's the use?

P: n/a

If I were to write an include with a relative path like

include("../conf/config.php");

What is the use?

As far as I understand it, the path is relative to the first script that
is called by php.

In other words, if the current working directory is /www/ and you were
"executing" a.php in that directory, then a.php included
/www/include/b.php by doing include("include/b.php");, then b.php tried
to include file /www/config/c.php, by doing include("../config/c.php) it
would not work. Instead php would be looking in /config for c.php and
it would not find it (?!).

Relative paths in include directives seem useless, because the paths are
not relative to the file that the include directive is in, like you
would expect them to be. These includes are totally dependant on where
the original file was "run" from.

Can any one shed some light on why relative paths in includes are of
-any- practical use in PHP? Or, is this a bug?

PHP 4.3.4 (cli) (built: Mar 9 2004 11:40:14)

By the way, I am just trying to separate my php project files into a few
directories. I just want to be able to include them without using
absolute paths. These files in these different directories should be
able to include each other.

-d

Jul 17 '05 #1
Share this Question
Share on Google+
7 Replies


P: n/a
"Doug" <do*****@XXXearthlinkXXX.net> wrote in message
news:rs*****************@newsread2.news.atl.earthl ink.net...

If I were to write an include with a relative path like

include("../conf/config.php");

What is the use?

As far as I understand it, the path is relative to the first script that
is called by php.


That's because in PHP, an include is an runtime operation and not a
preprocess macro expansion. As an operation, it's perfectly logical that
relative paths are relative to the runtime path and not the source path.
This is certainly not a bug.

To do multiple level relative includes, you can use __FILE__ to determine
the location of the current file, and append the directory path in the
include statement. Example:

<?

$CURRENT_SOURCE_FOLDER = dirname(__FILE__);

require_once("$CURRENT_SOURCE_FOLDER/grumpy.php");
require_once("$CURRENT_SOURCE_FOLDER/sleepy.php");
require_once("$CURRENT_SOURCE_FOLDER/sneezy.php");

....
Jul 17 '05 #2

P: n/a
In article <rs*****************@newsread2.news.atl.earthlink. net>,
Doug <do*****@XXXearthlinkXXX.net> wrote:
Can any one shed some light on why relative paths in includes are of
-any- practical use in PHP? Or, is this a bug?


I use them in the following way:

The first file included in every script is a small config file (in the
same directory as the script itself, so it's guaranteed to be found in a
default PHP setup) which sets the include paths. In that file I have
something like this:

ini_set('include_path', ini_get('include_path') . ':' .
realpath('relative/path/to/include_directory'));

Because of the 'realpath' function, which translates relative paths to
absolute paths, I can copy the directory tree of my application to
another machine and everything will keep working, even if the directory
structure 'above' my application is different.

JP

--
Sorry, <de*****@cauce.org> is een "spam trap".
E-mail adres is <jpk"at"akamail.com>, waarbij "at" = @.
Jul 17 '05 #3

P: n/a
Ok, but how often do you find that even though you don't use relative paths,
your sites doesn't work? Even if the top structure is different from your
development PC than your server / ISP server? I haven't had to use it yet.
In ASP yes, but not really in PHP

--

Kind Regards
Rudi Ahlers
+27 (82) 926 1689

Greater love has no one than this, that he lay down his life for his friends
(John 15:13).
"Jan Pieter Kunst" <de*****@cauce.org> wrote in message
news:de***************************@news1.news.xs4a ll.nl...
In article <rs*****************@newsread2.news.atl.earthlink. net>,
Doug <do*****@XXXearthlinkXXX.net> wrote:
Can any one shed some light on why relative paths in includes are of
-any- practical use in PHP? Or, is this a bug?


I use them in the following way:

The first file included in every script is a small config file (in the
same directory as the script itself, so it's guaranteed to be found in a
default PHP setup) which sets the include paths. In that file I have
something like this:

ini_set('include_path', ini_get('include_path') . ':' .
realpath('relative/path/to/include_directory'));

Because of the 'realpath' function, which translates relative paths to
absolute paths, I can copy the directory tree of my application to
another machine and everything will keep working, even if the directory
structure 'above' my application is different.

JP

--
Sorry, <de*****@cauce.org> is een "spam trap".
E-mail adres is <jpk"at"akamail.com>, waarbij "at" = @.
Jul 17 '05 #4

P: n/a


Chung Leong wrote:
"Doug" <do*****@XXXearthlinkXXX.net> wrote in message
news:rs*****************@newsread2.news.atl.earthl ink.net...
If I were to write an include with a relative path like

include("../conf/config.php");

What is the use?

As far as I understand it, the path is relative to the first script that
is called by php.

That's because in PHP, an include is an runtime operation and not a
preprocess macro expansion. As an operation, it's perfectly logical that
relative paths are relative to the runtime path and not the source path.
This is certainly not a bug.

To do multiple level relative includes, you can use __FILE__ to determine
the location of the current file, and append the directory path in the
include statement. Example:

<?

$CURRENT_SOURCE_FOLDER = dirname(__FILE__);

require_once("$CURRENT_SOURCE_FOLDER/grumpy.php");
require_once("$CURRENT_SOURCE_FOLDER/sleepy.php");
require_once("$CURRENT_SOURCE_FOLDER/sneezy.php");


Regardless of the implementatation details (runtime vs. preprocess),
they could've done it either way. Just like the makers of gcc could
have chose to do it either way. The PHP programmers chose to make the
path relative to the first script that is called by php.

In your example, you changed the paths to be absolute. That makes it so
that the file included would be the file that most people expect will be
included in the first place.

Could some one give me a practical example of a -relative- path being
used in PHP?
-d

Jul 17 '05 #5

P: n/a
In article <r8********************@is.co.za>,
"Rudi Ahlers" <SP4M_Rudi@SP4M_Bonzai.org.za_SP4M> wrote:
Ok, but how often do you find that even though you don't use relative paths,
your sites doesn't work? Even if the top structure is different from your
development PC than your server / ISP server? I haven't had to use it yet.
In ASP yes, but not really in PHP


Well, on my development machine I have my sites in my home folder
(~/Sites on Mac OS X) and on the server (also Mac OS X) they are in
/Library/WebServer/Documents.

It was also very convenient when we went from Linux (webserver in
/usr/local/httpd/htdocs) to Mac OS X -- I could simply copy my sites
without breaking anything.

JP

--
Sorry, <de*****@cauce.org> is een "spam trap".
E-mail adres is <jpk"at"akamail.com>, waarbij "at" = @.
Jul 17 '05 #6

P: n/a
"Doug" <do*****@XXXearthlinkXXX.net> wrote in message
news:HD*****************@newsread3.news.atl.earthl ink.net...
Regardless of the implementatation details (runtime vs. preprocess),
they could've done it either way. Just like the makers of gcc could
have chose to do it either way. The PHP programmers chose to make the
path relative to the first script that is called by php.


The fact that it's an runtime operation makes a big difference. Suppose I
write a function that include a file:

function CustomInclude($path) {
include($path);
echo "<!-- including $path -->";
}

And suppose I place this function in /chung/utilities/useless/functions.php.
When I pass a relative path to this function in some project, I certainly
wouldn't want the path to be relative to the file containing the function.
Jul 17 '05 #7

P: n/a


Chung Leong wrote:
"Doug" <do*****@XXXearthlinkXXX.net> wrote in message
news:HD*****************@newsread3.news.atl.earthl ink.net...
Regardless of the implementatation details (runtime vs. preprocess),
they could've done it either way. Just like the makers of gcc could
have chose to do it either way. The PHP programmers chose to make the
path relative to the first script that is called by php.

The fact that it's an runtime operation makes a big difference. Suppose I
write a function that include a file:

function CustomInclude($path) {
include($path);
echo "<!-- including $path -->";
}

And suppose I place this function in /chung/utilities/useless/functions.php.
When I pass a relative path to this function in some project, I certainly
wouldn't want the path to be relative to the file containing the function.


good point.

-d

Jul 17 '05 #8

This discussion thread is closed

Replies have been disabled for this discussion.