relative include paths? What's the use?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Doug

    relative include paths? What's the use?


    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("includ e/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

  • Chung Leong

    #2
    Re: relative include paths? What's the use?

    "Doug" <dougd99@XXXear thlinkXXX.net> wrote in message
    news:rsqbc.9130 $yN6.6152@newsr ead2.news.atl.e arthlink.net...[color=blue]
    >
    > 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.[/color]

    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");

    ....


    Comment

    • Jan Pieter Kunst

      #3
      Re: relative include paths? What's the use?

      In article <rsqbc.9130$yN6 .6152@newsread2 .news.atl.earth link.net>,
      Doug <dougd99@XXXear thlinkXXX.net> wrote:
      [color=blue]
      > Can any one shed some light on why relative paths in includes are of
      > -any- practical use in PHP? Or, is this a bug?[/color]

      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('includ e_path', ini_get('includ e_path') . ':' .
      realpath('relat ive/path/to/include_directo ry'));

      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, <devnull@cauce. org> is een "spam trap".
      E-mail adres is <jpk"at"akamail .com>, waarbij "at" = @.

      Comment

      • Rudi Ahlers

        #4
        Re: relative include paths? What's the use?

        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" <devnull@cauce. org> wrote in message
        news:devnull-4C0B3E.17212403 042004@news1.ne ws.xs4all.nl...
        In article <rsqbc.9130$yN6 .6152@newsread2 .news.atl.earth link.net>,
        Doug <dougd99@XXXear thlinkXXX.net> wrote:
        [color=blue]
        > Can any one shed some light on why relative paths in includes are of
        > -any- practical use in PHP? Or, is this a bug?[/color]

        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('includ e_path', ini_get('includ e_path') . ':' .
        realpath('relat ive/path/to/include_directo ry'));

        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, <devnull@cauce. org> is een "spam trap".
        E-mail adres is <jpk"at"akamail .com>, waarbij "at" = @.


        Comment

        • Doug

          #5
          Re: relative include paths? What's the use?



          Chung Leong wrote:[color=blue]
          > "Doug" <dougd99@XXXear thlinkXXX.net> wrote in message
          > news:rsqbc.9130 $yN6.6152@newsr ead2.news.atl.e arthlink.net...
          >[color=green]
          >>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.[/color]
          >
          >
          > 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");[/color]



          Regardless of the implementatatio n 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

          Comment

          • Jan Pieter Kunst

            #6
            Re: relative include paths? What's the use?

            In article <r8idnTOMSfZ9fv PdRVn-hg@is.co.za>,
            "Rudi Ahlers" <SP4M_Rudi@SP4M _Bonzai.org.za_ SP4M> wrote:
            [color=blue]
            > 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[/color]

            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, <devnull@cauce. org> is een "spam trap".
            E-mail adres is <jpk"at"akamail .com>, waarbij "at" = @.

            Comment

            • Chung Leong

              #7
              Re: relative include paths? What's the use?

              "Doug" <dougd99@XXXear thlinkXXX.net> wrote in message
              news:HDCbc.9139 $NL4.2247@newsr ead3.news.atl.e arthlink.net...[color=blue]
              > Regardless of the implementatatio n 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.[/color]

              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.


              Comment

              • Doug

                #8
                Re: relative include paths? What's the use?



                Chung Leong wrote:[color=blue]
                > "Doug" <dougd99@XXXear thlinkXXX.net> wrote in message
                > news:HDCbc.9139 $NL4.2247@newsr ead3.news.atl.e arthlink.net...
                >[color=green]
                >>Regardless of the implementatatio n 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.[/color]
                >
                >
                > 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.[/color]

                good point.

                -d

                Comment

                Working...