Why not simply define a set of variables for root dir and the other
and use full paths in your includes?

$root = "/wwwroot/mydomain/public/";

$homepageroot = "/";

$mydir = "subdir/";

now you can do:

include $rootpath.$mydir."inc.php";
<a href="<?php echo $hompageroot.$mydir."inc.php"; ?>">Link</a>
<a href="<?php echo $mydir."inc.php"; ?>">Link</a>

Regards Michael

"David Huyck" <[EMAIL PROTECTED]> schrieb im Newsbeitrag
> I am trying to define a function that is *like* the standard PHP
> function but is slightly different, but I am running into trouble with
> varible scoping.  The idea is this:
> I want to mimic "include()" in a way such that when I include a file, it
> then include files relative to itself, instead of relative to the root
> in the chain of includes.  For example, if I do something like this:
> // we are here: /root/file.php
> include("subDir/anotherFile.php");
> // we are here: /root/subDir/anotherFile.php
> include("diffSubDir/diffFile.php");
> I get a warning saying that "diffSubDir" is not a valid directory, because
> it is actually looking for "/root/diffSubDir/diffFile.php" when I mean to
> include "/root/subDir/diffSubDir/diffFile.php".
> The first thing I did was this:
> $myPath = getcwd()."/";
> chdir($myPath."subDir/");
> include("anotherFile.php");
> chdir($myPath);
> That's fine, but it's kind of kludgey, because I need to be really careful
> not to do crush my $rootPath variable if I need to do it again inside my
> include...  So the next step was to protect the variable by making it
> to a function.  Here is what I got:
> function myInclude($fileName)
> {
>  //you are here
>  $rootPath = getcwd()."/";
>  //find where we need to go
>  $aryFilePath = split("/", $fileName);
>  $fileToInclude = array_pop($aryFilePath);
>  $includePath = join("/", $aryFilePath) . "/";
>  //do the include
>  chdir($rootPath.$includePath);
>  include($fileToInclude);
>  chdir($rootPath);
> }
> So that's great!  It does almost everything I want it to do, EXCEPT: the
> variable scope within the includes is screwy.  The file included in this
> manner is local to the function, so it does not have inherent access to
> variables set before/after the call to myInclude().  That makes sense
> conceptually, but it doesn't solve my problem.  Declaring variables as
> "global" doesn't really fix it because a) I want to keep this generic, so
> won't always know what variables to call as global, and b) if I call this
> function from within an object, I want to keep my variables local to the
> class, but not to the function call within the class.  If I am in the
> for example, and I declare a var as global, I just lost my encapsulation.
> Yuck.
> What I really want is for this function to work just like the native PHP
> "include()" function, where it does its thing without making its own
> Is there any way to do such a thing?  I tried declaring and calling the
> function as &myInclude(), but that didn't do it either.
> Am I out-of-luck, or is there some cool trick I haven't learned yet?
> Thanks,
> David Huyck

PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to