473,473 Members | 1,730 Online
Bytes | Software Development & Data Engineering Community
Create Post

Home Posts Topics Members FAQ

is_subdir

Hi,

is there a function like is_subdir in PHP?

It's not, is it?

Is there a way to achieve its functionality (which is probably clearly
explained by its name ;)) in PHP?

Regards,
André

Jul 9 '06 #1
7 1876

André Hänsel wrote:
Hi,

is there a function like is_subdir in PHP?

It's not, is it?

Is there a way to achieve its functionality (which is probably clearly
explained by its name ;)) in PHP?

Regards,
André
If you mean a function that tells you whether a directory is a
sub-directory in another, that answer is no. You can approximate it
from getting the absolute path of both with realpath() and then compare
them.

Jul 9 '06 #2
Chung Leong schrieb:
André Hänsel wrote:
is there a function like is_subdir in PHP?

If you mean a function that tells you whether a directory is a
sub-directory in another, that answer is no. You can approximate it
from getting the absolute path of both with realpath() and then compare
them.
Unfortunately this doesn't work. When I have such a structure...
/
|-- collection
| `-- dir -/dir
`-- dir
`-- subdir

....then /collection/dir/subdir is a subdir of /collection but the
realpath solution says no, because it dereferences the symlinks.

Regards,
André

Jul 9 '06 #3
is_dir ("./mysubdir/mysubsubdir" )

or Windows

is_dir (".\\mysubdir\\mysubsubdir" )

.. means the current working directory.

Chung Leong wrote:
André Hänsel wrote:
Hi,

is there a function like is_subdir in PHP?

It's not, is it?

Is there a way to achieve its functionality (which is probably clearly
explained by its name ;)) in PHP?

Regards,
André

If you mean a function that tells you whether a directory is a
sub-directory in another, that answer is no. You can approximate it
from getting the absolute path of both with realpath() and then compare
them.
Jul 9 '06 #4
ImOk schrieb:
is_dir ("./mysubdir/mysubsubdir" )
That only determines if ./mysubdir/mysubsubdir is a directory. It makes
no statement about whether it is a subdirectory of another directory.

is_dir('../../nosubdir) will return true (if the dir exits, of course),
although it is no subdir of the working dir.

Jul 9 '06 #5
Mel
On 2006-07-10 03:49:12 +1000, "André Hänsel" <an***@webkr.desaid:
ImOk schrieb:
>is_dir ("./mysubdir/mysubsubdir" )

That only determines if ./mysubdir/mysubsubdir is a directory. It makes
no statement about whether it is a subdirectory of another directory.

is_dir('../../nosubdir) will return true (if the dir exits, of course),
although it is no subdir of the working dir.
Wouldn't you just try to open it as a directory from the context of the
parent and if it opens, then it's a subdir?

Jul 11 '06 #6
Mel schrieb:
On 2006-07-10 03:49:12 +1000, "André Hänsel" <an***@webkr.desaid:
ImOk schrieb:
is_dir ("./mysubdir/mysubsubdir" )
That only determines if ./mysubdir/mysubsubdir is a directory. It makes
no statement about whether it is a subdirectory of another directory.

is_dir('../../nosubdir) will return true (if the dir exits, of course),
although it is no subdir of the working dir.

Wouldn't you just try to open it as a directory from the context of the
parent and if it opens, then it's a subdir?
If there were no ".."s in the world, that would work.
I would have to get some kind of temporary chroot, but that would
probably also dereference the symlinks.

But another idea:
There connot be an escaped slash in a path, can it?
What does a path like "dir\/subdir" mean?
a) a subdirectory of the current path named "dir/subdir"
b) a directory named "dir\" with a subdirectory named "subdir"
I think, it's answer b.

If that is true, it will be safe to just explode the path by "/",
traverse it and convert every "." to nothing and every ".." to "go one
step up" (if I am not already in /).

Right?

Jul 11 '06 #7
I am totally confused by this thread. What in the world are you trying
to do?
In my experience of development when the code starts getting weird,
then the original premise must be re-evaluated. Maybe you can write the
logic in pseudocode and post it here.

André Hänsel wrote:
Mel schrieb:
On 2006-07-10 03:49:12 +1000, "André Hänsel" <an***@webkr.desaid:
ImOk schrieb:
>is_dir ("./mysubdir/mysubsubdir" )
>
That only determines if ./mysubdir/mysubsubdir is a directory. It makes
no statement about whether it is a subdirectory of another directory.
>
is_dir('../../nosubdir) will return true (if the dir exits, of course),
although it is no subdir of the working dir.
Wouldn't you just try to open it as a directory from the context of the
parent and if it opens, then it's a subdir?

If there were no ".."s in the world, that would work.
I would have to get some kind of temporary chroot, but that would
probably also dereference the symlinks.

But another idea:
There connot be an escaped slash in a path, can it?
What does a path like "dir\/subdir" mean?
a) a subdirectory of the current path named "dir/subdir"
b) a directory named "dir\" with a subdirectory named "subdir"
I think, it's answer b.

If that is true, it will be safe to just explode the path by "/",
traverse it and convert every "." to nothing and every ".." to "go one
step up" (if I am not already in /).

Right?
Jul 12 '06 #8

This thread has been closed and replies have been disabled. Please start a new discussion.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.