From: RQuadling at GMail dot com
Operating system: Windows XP SP3
PHP version: 5.3SVN-2010-01-04 (snap)
PHP Bug Type: Directory function related
Bug description: Junctions over a share fail
Description:
------------
realpath() returns false for files inside junctions inside a share
accessed using a relative path.
Ok. I _did_ say this was an edge case.
The code below is an batch script utilising Windows NET SHARE and NET
MAP commands to create a drive J: mapped to C:\RAQ_Share and the
JUNCTION program from System Internals to create a junction in that
share.
The last few lines relate specifically to PHP.
Essentially absolute paths are realpath()-able just fine, but relative
paths are not.
Reproduce code:
---------------
@ECHO OFF
ECHO Create Original directory and file.
MD C:\RAQ_Orig
ECHO This is the file. > C:\RAQ_Orig\File.txt
ECHO.
ECHO Create share
MD C:\RAQ_Share
NET SHARE RAQ_Shared=C:\RAQ_Share /UNLIMITED
ECHO.
ECHO Map share
@NET USE J: /D > NUL
NET USE J: \\%COMPUTERNAME%\RAQ_Shared
ECHO.
ECHO Create junction
MD J:\RAQ_Junc
JUNCTION J:\RAQ_Junc C:\RAQ_Orig
ECHO.
ECHO Show the folders.
DIR \RAQ*
ECHO.
ECHO See contents of junction
DIR J:\RAQ_Junc\File.txt
ECHO.
ECHO Use PHP to report realpaths
PHP -v
PHP -n -r "var_dump(realpath('J:/RAQ_Junc/File.txt'));"
CD /D J:\
PHP -n -r "var_dump(realpath('/RAQ_Junc/File.txt'));"
CD \RAQ_Junc
PHP -n -r "var_dump(realpath('./File.txt'));"
Expected result:
----------------
Create Original directory and file.
Create share
RAQ_Shared was shared successfully.
Drop and map share
J: was deleted successfully.
The command completed successfully.
Create junction
Junction v1.05 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2007 Mark Russinovich
Systems Internals - http://www.sysinternals.com
Created: J:\RAQ_Junc
Targetted at: C:\RAQ_Orig
Show the folders.
Volume in drive C has no label.
Volume Serial Number is 1044-5992
Directory of C:\
2010/01/04 17:47 <DIR> RAQ_Orig
2010/01/04 17:47 <DIR> RAQ_Share
0 File(s) 0 bytes
2 Dir(s) 11,663,155,200 bytes free
See contents of junction
Volume in drive J has no label.
Volume Serial Number is 1044-5992
Directory of J:\RAQ_Junc
2010/01/04 17:47 20 File.txt
1 File(s) 20 bytes
0 Dir(s) 11,663,155,200 bytes free
Use PHP to report realpaths
PHP 5.3.3-dev (cli) (built: Jan 4 2010 12:59:42)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
string(20) "C:\RAQ_Orig\File.txt"
string(20) "C:\RAQ_Orig\File.txt"
string(20) "C:\RAQ_Orig\File.txt"
Actual result:
--------------
Create Original directory and file.
Create share
RAQ_Shared was shared successfully.
Drop and map share
J: was deleted successfully.
The command completed successfully.
Create junction
Junction v1.05 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2007 Mark Russinovich
Systems Internals - http://www.sysinternals.com
Created: J:\RAQ_Junc
Targetted at: C:\RAQ_Orig
Show the folders.
Volume in drive C has no label.
Volume Serial Number is 1044-5992
Directory of C:\
2010/01/04 17:47 <DIR> RAQ_Orig
2010/01/04 17:47 <DIR> RAQ_Share
0 File(s) 0 bytes
2 Dir(s) 11,663,155,200 bytes free
See contents of junction
Volume in drive J has no label.
Volume Serial Number is 1044-5992
Directory of J:\RAQ_Junc
2010/01/04 17:47 20 File.txt
1 File(s) 20 bytes
0 Dir(s) 11,663,155,200 bytes free
Use PHP to report realpaths
PHP 5.3.3-dev (cli) (built: Jan 4 2010 12:59:42)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
string(20) "C:\RAQ_Orig\File.txt"
string(20) "C:\RAQ_Orig\File.txt"
bool(false)
--
Edit bug report at http://bugs.php.net/?id=50659&edit=1
--
Try a snapshot (PHP 5.2):
http://bugs.php.net/fix.php?id=50659&r=trysnapshot52
Try a snapshot (PHP 5.3):
http://bugs.php.net/fix.php?id=50659&r=trysnapshot53
Try a snapshot (PHP 6.0):
http://bugs.php.net/fix.php?id=50659&r=trysnapshot60
Fixed in SVN:
http://bugs.php.net/fix.php?id=50659&r=fixed
Fixed in SVN and need be documented:
http://bugs.php.net/fix.php?id=50659&r=needdocs
Fixed in release:
http://bugs.php.net/fix.php?id=50659&r=alreadyfixed
Need backtrace:
http://bugs.php.net/fix.php?id=50659&r=needtrace
Need Reproduce Script:
http://bugs.php.net/fix.php?id=50659&r=needscript
Try newer version:
http://bugs.php.net/fix.php?id=50659&r=oldversion
Not developer issue:
http://bugs.php.net/fix.php?id=50659&r=support
Expected behavior:
http://bugs.php.net/fix.php?id=50659&r=notwrong
Not enough info:
http://bugs.php.net/fix.php?id=50659&r=notenoughinfo
Submitted twice:
http://bugs.php.net/fix.php?id=50659&r=submittedtwice
register_globals:
http://bugs.php.net/fix.php?id=50659&r=globals
PHP 4 support discontinued: http://bugs.php.net/fix.php?id=50659&r=php4
Daylight Savings: http://bugs.php.net/fix.php?id=50659&r=dst
IIS Stability:
http://bugs.php.net/fix.php?id=50659&r=isapi
Install GNU Sed:
http://bugs.php.net/fix.php?id=50659&r=gnused
Floating point limitations:
http://bugs.php.net/fix.php?id=50659&r=float
No Zend Extensions:
http://bugs.php.net/fix.php?id=50659&r=nozend
MySQL Configuration Error:
http://bugs.php.net/fix.php?id=50659&r=mysqlcfg