php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #72367 Relative Drive:path incorrectly assumed to be Drive:\path
Submitted: 2016-06-09 09:38 UTC Modified: 2021-04-22 12:13 UTC
Votes:2
Avg. Score:3.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: RQuadling at GMail dot com Assigned:
Status: Open Package: *Directory/Filesystem functions
PHP Version: 5.6.22 OS: Windows
Private report: No CVE-ID: None
 [2016-06-09 09:38 UTC] RQuadling at GMail dot com
Description:
------------
If you use a relative path to a file from Windows command line, PHP interprets the supplied location as a root.

The test script below requires a Windows setup with 2 drives (C and D). The script is a batch script that creates the test script and cleans up after itself.

Whilst this is similar in some aspects to previously reported bugs related to realpath(), the issue is that the constants __FILE__ and __DIR__ are correct, thus making them useless.

OOI, using the absolute path for the PHP script (C:\PHP56\PHP D:\ReaL\PaTH\BuG\TeSTBuG.php), produces the correct results.



Test script:
---------------
@ECHO OFF
REM Make directories for testing.
MD C:\Test\Real\PaTH\BuG
MD D:\ReaL\PaTH\BuG

REM Make test PHP script.
ECHO ^<?php > D:\ReaL\PaTH\BuG\TeSTBuG.php
ECHO var_export([PHP_VERSION, __FILE__, __DIR__, getcwd(), realpath(__FILE__), realpath(__DIR__), realpath(getcwd()), $argv]);>> D:\ReaL\PaTH\BuG\TeSTBuG.php

REM Make sure drives are in their directories.
CD /D D:\ReaL\PaTH\BuG
CD /D C:\Test\Real\PaTH\BuG

REM Call PHP using relative paths.
C:\PHP56\PHP D:TeSTBuG.php

REM Clean-up
DEL D:\ReaL\PaTH\BuG\TeSTBuG.php
CD /D D:\
CD /D C:\
RD C:\Test\Real\PaTH\BuG
RD D:\ReaL\PaTH\BuG


Expected result:
----------------
array (
  0 => '5.6.20',
  1 => 'D:\\ReaL\\PaTH\\BuG\\TeSTBuG.php',
  2 => 'D:\\ReaL\\PaTH\\BuG',
  3 => 'C:\\Test\\Real\\PaTH\\BuG',
  4 => D:\\ReaL\\PaTH\\BuG\\TeSTBuG.php,
  5 => 'D:\\ReaL\\PaTH\\BuG',
  6 => 'C:\\Test\\Real\\PaTH\\BuG',
  7 =>
  array (
    0 => 'D:TeSTBuG.php',
  ),
)

Actual result:
--------------
array (
  0 => '5.6.20',
  1 => 'D:\\TeSTBuG.php',
  2 => 'D:\\',
  3 => 'C:\\Test\\Real\\PaTH\\BuG',
  4 => false,
  5 => 'D:\\',
  6 => 'C:\\Test\\Real\\PaTH\\BuG',
  7 =>
  array (
    0 => 'D:TeSTBuG.php',
  ),
)

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2016-06-10 12:05 UTC] RQuadling at GMail dot com
Typo in my initial report ...

Whilst this is similar in some aspects to previously reported bugs related to realpath(), the issue is that the constants __FILE__ and __DIR__ are INCORRECT, thus making them useless.
 [2016-06-10 12:09 UTC] rquadling@php.net
-Summary: Relative Drive:path incorrectly assumed to be Drive:/path +Summary: Relative Drive:path incorrectly assumed to be Drive:\path
 [2021-04-22 12:13 UTC] cmb@php.net
These drive relative paths are a pain in the neck; see also
<https://github.com/php/php-src/pull/5001>.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 14:01:29 2024 UTC