Bug #52176 [Com]: unlink() cannot delete symbolic link which points to a directory
| From: | DiablosOffens at gmx dot de | Date: | Tue, 25 Jul 2017 14:44:04 +0000 |
| Subject: | Bug #52176 [Com]: unlink() cannot delete symbolic link which points to a directory | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-210321@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=52176&edit=1
ID: 52176
Comment by: DiablosOffens at gmx dot de
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:
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".
Previous Comments:
------------------------------------------------------------------------
[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?
------------------------------------------------------------------------
[2011-11-15 15:55:07] felipe@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
------------------------------------------------------------------------
[2010-06-24 19:37:57] o_shes01 at uni-muenster dot de
Description:
------------
unlink($fname) fails if the file named by $fname is a symbolic link which points to a directory.
Such a link (not the directory which it points to!) can however be deleted via
"rmdir($fname)", which is also a bug (IMHO).
Note: if the link points to a regular file (not directory), then unlink works as expected (deletes
the link, not the file pointed to).
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=52176&edit=1