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] [EMAIL PROTECTED]

.
.
$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] [EMAIL PROTECTED]

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

Reply via email to