#44293 [Fbk->Opn]: realpath does not follow Virtual directory
| From: | mmichel at chez dot com | Date: | Mon, 03 Mar 2008 13:56:33 +0000 |
| Subject: | #44293 [Fbk->Opn]: realpath does not follow Virtual directory | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-122875@lists.php.net to get a copy of this message | ||
ID: 44293
User updated by: mmichel at chez dot com
Reported By: mmichel at chez dot com
-Status: Feedback
+Status: Open
Bug Type: Filesystem function related
Operating System: Win2003
PHP Version: 5.2.5
New Comment:
@jani:
Virtual dir is kind of a symlink handled by IIS rather than the OS.
Thus, the document_root for http://localhost/elsewhere/test.php is
different from the one for http://localhost/local/test.php
Still, browsing to http://localhost/elsewhere works, and
executing
http://localhost/elsewhere/test.php works.
Previous Comments:
------------------------------------------------------------------------
[2008-03-03 13:46:00] jani@php.net
.
.
$check_path=realpath($virt);
print ($checkpath === FALSE) ? "virtual dir not recognized<br>" :
.
.
That's your code, note the tiny typo there? :)
From the manual:
realpath() returns FALSE on failure, e.g. if the file does not exist.
I don't know what these 'Virtual dirs' are in IIS, but I guess they're
not _filesystem_ things. realpath() is meant to be used with
_filesystem_..
------------------------------------------------------------------------
[2008-03-03 13:45:05] mmichel at chez dot com
Moreover:
On this page http://php.uli.it/manual/hk/function.realpath.php
a comment provides this:
=8<=================================================================
This is a modified version of the code written by Dave, wich finds the
absolute path of a virtual path, this function returns the absolute
path, If you have php running on IIS Plataform you could find this very
usefull
function mappath2($path) {
//this here bellow trims the last / in case it has it
If ($path{strlen($path)-1}=="/"){
$path = substr($path,0, strlen($path)-1);
}
$relative = str_repeat('../',substr_count($path,'/')-1);
// transforms virtual or relative path to an absolute path
return realpath(substr($path,0,1)=='/' ? $relative.substr($path,1) :
$path);
}
the implementation would be like this
having
$imagepath = "/website001/images/catalog/";
$realpath = mappath2($imagepath);
The result in $realpath would be something like
C:\Inetpub\wwwroot\website001\images\catalog
=8<=================================================================
I tried the function and it did not worked.
------------------------------------------------------------------------
[2008-03-03 13:39:57] mmichel at chez dot com
it returns:
string(22) "C:\Inetpub\wwwroot\local"
bool(false)
------------------------------------------------------------------------
[2008-03-03 13:04:43] jani@php.net
What does this script output:
<?php
$local='./local';
$virt='./elsewhere';
var_dump(realpath($local));
var_dump(realpath($virt));
?>
------------------------------------------------------------------------
[2008-02-29 15:46:00] mmichel at chez dot com
Description:
------------
If you do a realpath('./elsewhere'), where elsewhere is a IIS virtual
directory, realpath return FALSE.
Reproduce code:
---------------
- Use the default site in IIS6 (root=c:\inetpub\wwwroot)
- in the root directory create a folder called local
- Create a virtual directory (either via a network share or in another
path on a local drive, e.g. C:\Elsewhere), and call it elsewhere
then
<?php
$local='./local';
$virt='./elsewhere';
$check_path=realpath($local);
print ($checkpath === FALSE) ? "local path not resolved<br>" :
"local=$check_path<br>";
$check_path=realpath($virt);
print ($checkpath === FALSE) ? "virtual dir not recognized<br>" :
"virtual=$check_path<br>";
?>
Expected result:
----------------
local=C:\Inetpub\wwwroot\local
virtual=C:\Elsewhere
Actual result:
--------------
local=C:\Inetpub\wwwroot\local
virtual=
Note that realpath does not return FALSE...
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=44293&edit=1