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

Comparison function for directories?

P: n/a
Hi,

I'm using php 4.4.4. Given two variables,

$dir1 = "/usr/local/apache2/htdocs/"
$dir2 = "/usr/local/apache2/htdocs"

What is a comparison function I could write that would say these two
directories are the same? A straight string comparison would not work
above.

Thanks for any insights, - Dave
Feb 28 '08 #1
Share this Question
Share on Google+
3 Replies


P: n/a
On Thu, 28 Feb 2008 18:57:11 +0100, la***********@zipmail.com
<la***********@zipmail.comwrote:
Hi,

I'm using php 4.4.4. Given two variables,

$dir1 = "/usr/local/apache2/htdocs/"
$dir2 = "/usr/local/apache2/htdocs"

What is a comparison function I could write that would say these two
directories are the same? A straight string comparison would not work
above.
$is_the_same_dir = realpath($dir1) == realpath($dir2);
--
Rik Wasmus
Feb 28 '08 #2

P: n/a
*** Rik Wasmus escribió/wrote (Thu, 28 Feb 2008 19:00:09 +0100):
>$dir1 = "/usr/local/apache2/htdocs/"
$dir2 = "/usr/local/apache2/htdocs"
$is_the_same_dir = realpath($dir1) == realpath($dir2);
Just two remarks:

- In Unix, the file system is case sensible. So (depending on what you need
this for) you may use === instead.

- realpath() returns FALSE when the path does not exist; take it into
account.
--
-+ http://alvaro.es - Álvaro G. Vicario - Burgos, Spain
++ Mi sitio sobre programación web: http://bits.demogracia.com
+- Mi web de humor austrohúngaro: http://www.demogracia.com
--
Feb 29 '08 #3

P: n/a
Álvaro G. Vicario wrote:
Rik Wasmus escribió/wrote:
>>
$is_the_same_dir = realpath($dir1) == realpath($dir2);

- In Unix, the file system is case sensible. So (depending on what you
need this for) you may use === instead.
The '==' operator is sufficient, as it is case-sensitive. The '===' will
also work, but is not required.
- realpath() returns FALSE when the path does not exist; take it into
account.
This may indeed cause problems, depending on exactly what the OP is hoping
to compare -- the directory paths of real, existing directories, or
strings representing directories which may or may not exist.

A possibility would be to replace realpath above with normalise_dirname:

function normalise_dirname ($dir)
{
if (realpath($dir))
return realpath($dir);
if (preg_match('#/$#', $dir))
return $dir;
return "$dir/";
}

If you needed to, you could further enhance it to deal with path
components like '.' and '..'.

--
Toby A Inkster BSc (Hons) ARCS
[Geek of HTML/SQL/Perl/PHP/Python/Apache/Linux]
[OS: Linux 2.6.17.14-mm-desktop-9mdvsmp, up 30 days, 22:28.]

Bottled Water
http://tobyinkster.co.uk/blog/2008/02/18/bottled-water/
Feb 29 '08 #4

This discussion thread is closed

Replies have been disabled for this discussion.