Bug #52176 [Com]: unlink() cannot delete symbolic link which points to a directory
Edit report at https://bugs.php.net/bug.php?id=52176&edit=1
ID: 52176
Comment by: adrien dot foulon at tukan dot hu
Reported by: o_shes01 at uni-muenster dot de
Summary: unlink() cannot delete symbolic link which points to
a directory
Status: Not a bug
Type: Bug
Package: Filesystem function related
Operating System: Windows Vista SP2
PHP Version: 5.3.2
Block user comment: N
Private report: N
New Comment:
God, 2022 and php8 still has this exact issue
Behavior is different between windows and linux
Previous Comments:
------------------------------------------------------------------------
[2017-07-25 15:51:40] DiablosOffens at gmx dot de
I have to correct me.
Microsoft documents it at this page: https://msdn.microsoft.com/de-de/library/windows/desktop/aa363866%28v=vs.85%29.aspx
But this doesn't fix the problem at all. It only proves that unlink behaves different on
Windows than the POSIX standard suggests.
------------------------------------------------------------------------
[2017-07-25 14:44:01] DiablosOffens at gmx dot de
There is actually a difference between Linux and Windows here.
This difference is not documented in any way, not by PHP nor by Microsoft.
Sure, the documentation for DeleteFile has a section "Symbolic link behavior", but it
doesn't mention the special case for a directory, because the whole site
(https://msdn.microsoft.com/en-us/library/windows/desktop/aa363915%28v%3dvs.85%29.aspx) only
mentions the case where a file path is passed to this function. So it holds true that unlink works
for symbolic links to files, but at least until Windows Server 2012 R2 it is proven that it
doesn't work for symbolic links to directories.
It would be nice to see a bug fix for PHP, to get less surprises on different platforms.
Note: The C-runtime function "unlink" from Microsoft's msvcr*.dll is only a wrapper
for the Win32-API function "DeleteFile".
------------------------------------------------------------------------
[2013-10-21 19:38:30] lucas dot ekrause at gmail dot com
@felipe@php.net
> Please double-check the documentation [...]
I did, but didn't find anything documenting this issue.
Can you please post a link to the page which is documenting it?
------------------------------------------------------------------------
[2013-07-03 15:39:38] kulbakin at ya dot ru
Have similar issue with Windows 7 64 bit php 5.3.26
unlink() for a link created earlier with symlink() call for a directory returns
Warning: unlink([...]): Permission denied in [...] on line [...]
and rmdir() works for it, but on *nix unlink() works for such links.
------------------------------------------------------------------------
[2011-12-15 13:54:10] o_shes01 at uni-muenster dot de
Assuming that $fname is absolute filename of a symbolic link, which points to a directory.
On Linux, unlink($fname) deletes the link itself, and rmdir($fname) does NOT work.
On Windows, unlink($fname) does not work, and rmdir($fname) deletes the link.
This behaviour is not documented in any way.
If this is not a bug, then which is the correct way to delete a symbolic link which points to a
directory?
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=52176
--
Edit this bug report at https://bugs.php.net/bug.php?id=52176&edit=1
Thread (8 messages)