| 
        php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login | 
  [2012-05-02 17:37 UTC] david at panmedia dot co dot nz
 Description:
------------
I have a symlink on my Windows server which was made like this:
F:\>mkdir link-target
F:\>mklink /D link f:\link-target 
(Note the lower case f: in the symlink target)
In PHP I run this:
$dir = realpath('f:\link');
var_dump($dir);
$dir = realpath($dir);
var_dump($dir);
Which outputs:
string 'f:\link-target' (length=14)
string 'F:\link-target' (length=14)
Notice the change in case on the second realpath.
The expected output is:
string 'F:\link-target' (length=14)
string 'F:\link-target' (length=14)
Test script:
---------------
<?php
// F:\>mkdir link-target
// F:\>mklink /D link f:\link-target 
$dir = realpath('f:\link');
var_dump($dir);
$dir = realpath($dir);
var_dump($dir);
Expected result:
----------------
string 'F:\link-target' (length=14)
string 'F:\link-target' (length=14)
Actual result:
--------------
string 'f:\link-target' (length=14)
string 'F:\link-target' (length=14)
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits             
             | 
    |||||||||||||||||||||||||||
            
                 
                Copyright © 2001-2025 The PHP GroupAll rights reserved.  | 
        Last updated: Tue Nov 04 06:00:01 2025 UTC | 
On further investigation I have noticed that on Windows symlinks are only followed 1 level deep: // F:\>mkdir link-target // F:\>mklink /D link f:\link-target // F:\>mklink /D link2 f:\link $dir = realpath('f:\link2'); var_dump($dir); $dir = realpath($dir); var_dump($dir); $dir = realpath($dir); var_dump($dir); // string 'f:\link' (length=7) // string 'f:\link-target' (length=14) // string 'F:\link-target' (length=14)