Edit report at https://bugs.php.net/bug.php?id=77317&edit=1
ID: 77317
Updated by: ab@php.net
Reported by: mtanalin at yandex dot ru
Summary: __DIR__, __FILE__, realpath() reveal physical path
for subst virtual drive
-Status: Assigned
+Status: Closed
Type: Bug
Package: *Directory/Filesystem functions
Operating System: Windows 10
PHP Version: 7.3.0
Assigned To: ab
Block user comment: N
Private report: N
New Comment:
Automatic comment on behalf of ab
Revision: http://git.php.net/?p=php-src.git;a=commit;h=199914b42dccae1c87212dac988b14f57969652d
Log: Fixed bug #77317 __DIR__, __FILE__, realpath() reveal physical path for subst virtual drive
Previous Comments:
------------------------------------------------------------------------
[2018-12-24 17:12:36] ab@php.net
Thanks for the ping, Christoph. Yes, the intention was to move to a faster API. I think though, the
reported behavior change needs to be fixed to comply with realpath(3) and earlier PHP. That would
make the initial patch somewhat slower unfortunately. Perhaps this could be revisited in later PHP
versions, by introducing a Windows specific routine or another way. I'll be working on a patch,
otherwise we can also disable the quick path handling but keep the new internal realpath API.
Thanks.
------------------------------------------------------------------------
[2018-12-21 22:57:13] cmb@php.net
The behavioral change has been introduced with commit f3f6cd2[1].
It seems to me that this change is intentional. Anatol, if I'm
right, please assign back to me, and I'll add a respective note to
upgrading and the migration guide.
[1] <http://git.php.net/?p=php-src.git;a=commit;h=f3f6cd24e9677c820f198f3804d6c9a932685373>
------------------------------------------------------------------------
[2018-12-18 19:51:13] mtanalin at yandex dot ru
Description:
------------
__DIR__, __FILE__ and realpath() now reveal physical path for
virtual drives created with subst under Windows. This is a breaking
backward-incompatible change.
The Windowsâ built-in subst application maps a physical directory to a virtual
drive and is used by Denwer for creating a virtual drive that web servers are virtually located on.
Denwer is a WAMP kit popular in Russia.
Documentation pages for __DIR__, __FILE__ and realpath() have
no information about this change.
PHP 7.2.12 works as expected: virtual-drive path is returned, physical path is not revealed.
So either the behavior in PHP 7.3.x should be the same as in PHP 7.2.x (virtual-drive path returned,
physical-drive path not revealed), or this breaking change should be documented.
For example, in PHP 7.3.0 (with the latest Apache 2.4.37 [2018-11-21] from Apache Lounge):
__DIR__:
D:\_webservers\home\test-host
__FILE__:
D:\_webservers\home\test-host\test.php
$_SERVER['DOCUMENT_ROOT']:
Z:/home/test-host/www
realpath($_SERVER['DOCUMENT_ROOT']):
D:\_webservers\home\test-host\www
While in PHP 7.2.12:
__DIR__:
Z:\home\test-host
__FILE__:
Z:\home\test-host\test.php
$_SERVER['DOCUMENT_ROOT']:
Z:/home/test-host/www
realpath($_SERVER['DOCUMENT_ROOT']):
Z:\home\test-host\www
Test script:
---------------
<?php
echo __DIR__ . '<br>'
. __FILE__ . '<br>'
. $_SERVER['DOCUMENT_ROOT'] . '<br>'
. realpath($_SERVER['DOCUMENT_ROOT']);
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=77317&edit=1