Loading ...
Sorry, an error occurred while loading the content.

nested includes revisited, w/workaround

Expand Messages
  • ivan-asp@420.am
    Hi, Nested includes don t work as you would expect (well, at least they don t work as *I* expected :). Given files /PATH/A /PATH/DIR/B /PATH/DIR/C Say file A
    Message 1 of 3 , Dec 30, 2004
    • 0 Attachment
      Hi,

      Nested includes don't work as you would expect (well, at least they
      don't work as *I* expected :). Given files

      /PATH/A
      /PATH/DIR/B
      /PATH/DIR/C

      Say file A includes "DIR/B". This works fine.

      Say file B includes "C". This works fine when file B is accessed
      directly, but fails when it is included in A as above. Apache::ASP
      considers the "current directory" to be /PATH, not /PATH/DIR

      This was brought up a few months ago by by Marko Friedeman, and although
      Josh said it was supposed to work this way, I would ask that perhaps the
      issue could be reconsidered. I was bitten badly by this while
      refactoring a monolithic page into many smaller files using includes. I
      believe the current behaviour is rather counter-intuititve.

      As a workaround, I'm using an include wrapper that looks sort of like
      this (irrelevant code excluded):

      sub include {
      my $file = shift;
      my $shift = 0;
      if ( $file =~ m(^([^/].*)/[^/]+) ) {
      unshift @{$Response->{asp}{includes_dir}}, "./$1";
      $shift = 1;
      }
      my $ref = $Response->TrapInclude($file, @_);
      shift @{$Response->{asp}{includes_dir}} if $shift;
      $$ref;
      }

      This lets my code work the way I want, though perhaps a more proper
      implementation would consider the "current directory" to be that of the
      currently executing include rather than muck about with the includes_dir
      path.

      Any thoughts appriciated, even if its just "go away and use Mason if you
      want that behaviour". :)

      --
      _ivan
      Open-source billing, ticketing and provisioning
      for ISPs, VoIP providers and online businesses
      http://www.sisd.com/freeside/

      ---------------------------------------------------------------------
      To unsubscribe, e-mail: asp-unsubscribe@...
      For additional commands, e-mail: asp-help@...
    • Josh Chamas
      ... I believe your goal really is to really refactor includes elsewhere, in which case we already have a mechanism for this. Includes can be found in Global
      Message 2 of 3 , Dec 31, 2004
      • 0 Attachment
        ivan-asp@... wrote:
        > Hi,
        >
        > Nested includes don't work as you would expect (well, at least they
        > don't work as *I* expected :). Given files
        >
        > /PATH/A
        > /PATH/DIR/B
        > /PATH/DIR/C
        >

        I believe your goal really is to really refactor includes elsewhere,
        in which case we already have a mechanism for this. Includes can
        be found in Global or IncludesDir directorys, so if you configure
        these setting, they will pick up includes in your search path. See:

        http://apache-asp.org/config.html#IncludesDir

        In your case you might want to set /PATH/DIR to be part of your IncludesDir.

        I think really refactoring of these includes should put them into a path
        not browsable from the web, so should be ideally outside your main script
        area, not under it.

        Could this take care of your issue possibly?

        Regards,

        Josh

        ---------------------------------------------------------------------
        To unsubscribe, e-mail: asp-unsubscribe@...
        For additional commands, e-mail: asp-help@...
      • ivan-asp@420.am
        ... No, that s not my goal, that s a way of avoiding the problem. I m happy with my directory structure. I m aware of the available workarounds and my post
        Message 3 of 3 , Jan 3, 2005
        • 0 Attachment
          On Fri, Dec 31, 2004 at 01:32:04PM -0800, Josh Chamas wrote:
          > ivan-asp@... wrote:
          > >Hi,
          > >
          > >Nested includes don't work as you would expect (well, at least they
          > >don't work as *I* expected :). Given files
          > >
          > >/PATH/A
          > >/PATH/DIR/B
          > >/PATH/DIR/C
          > >
          >
          > I believe your goal really is to really refactor includes elsewhere,

          No, that's not my goal, that's a way of avoiding the problem. I'm happy
          with my directory structure. I'm aware of the available workarounds and
          my post even included one.

          The problem is the "action-at-a-distance" when using nested includes,
          in which includes behave differently depending on where they're called
          from.

          > I think really refactoring of these includes should put them into a path
          > not browsable from the web, so should be ideally outside your main script
          > area, not under it.

          This doesn't work for me as I don't have this clear distinction between
          "includes" and "top-level pages browseable from the web".

          --
          _ivan
          Open-source billing, ticketing and provisioning
          for ISPs, VoIP providers and online businesses
          http://www.sisd.com/freeside/

          ---------------------------------------------------------------------
          To unsubscribe, e-mail: asp-unsubscribe@...
          For additional commands, e-mail: asp-help@...
        Your message has been successfully submitted and would be delivered to recipients shortly.