Bug #67220 [Com]: realpath() on MacOSX doesn't normalize the case of characters
| From: | rullaf at gmail dot com | Date: | Fri, 01 Aug 2014 10:41:23 +0000 |
| Subject: | Bug #67220 [Com]: realpath() on MacOSX doesn't normalize the case of characters | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-186926@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=67220&edit=1
ID: 67220
Comment by: rullaf at gmail dot com
Reported by: nicolas dot grekas+php at gmail dot com
Summary: realpath() on MacOSX doesn't normalize the case of
characters
Status: Not a bug
Type: Bug
Package: Filesystem function related
Operating System: MacOSX/Darwin
PHP Version: 5.5.12
Block user comment: N
Private report: N
New Comment:
Please note this is sill an issue. Either the documentation should be changed to warn the realpath
function does NOT return canonical path (it currently says
realpath â Returns
canonicalized absolute pathname) or the function should be fixed.
Previous Comments:
------------------------------------------------------------------------
[2014-05-07 18:10:44] tyrael@php.net
for the record HFS+ is optionally supports case sensitivity, but the current default is the case
insensitive/preserve mode AFAIK.
I don't have a windows box at hand at the moment, but I'm fairly sure that realpath on
windows does indeed correctly canonizes the path (http://www.php.net/realpath#example-2512 seems to
be confirming this).
I think closing the issue with Not a bug is wrong, we should either keep it open until we can fix
it, or mark as Won't fix, and document it.
------------------------------------------------------------------------
[2014-05-07 15:14:41] nicolas dot grekas+php at gmail dot com
The doc says "returns the canonicalized absolute pathname"
"canonicalized" is what makes this a bug.
An other example that fails is require_once:
require_once 'TEST.PHP';
require_once 'test.php';
This does require the same file twice.
------------------------------------------------------------------------
[2014-05-07 15:06:58] rasmus@php.net
Well, I am still somewhat sympathetic to this though. The native OSX realpath() call does normalize
the case. eg.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
printf("%s
%s\n",realpath("/Users",NULL),realpath("/users",NULL));
return(0);
}
Outputs: /Users /Users
And we used to do so as well when we relied on the system-level realpath() call. However, after we
optimized realpath() to allow us to do intra-path caching, we now use our own implementation.
Fixing this particular issue isn't that easy, and you are right, we don't promise to do
path normalization in this function.
------------------------------------------------------------------------
[2014-05-07 14:58:50] levim@php.net
Almost certainly this is because HFS+ is case-sensitive by default. Currently realpath "expands
all symbolic links and resolves references to '/./', '/../' and extra
'/' characters in the input path and returns the canonicalized absolute pathname".
Nowhere does that indicate anything about case sensitivity.
------------------------------------------------------------------------
[2014-05-06 15:24:24] nicolas dot grekas+php at gmail dot com
Description:
------------
See test script.
__FILE__, __DIR__, ReflectionClass::getFilename(), etc. are also affected (but getcwd() is OK).
Test script:
---------------
<?php
var_dump(realpath('/Users') === realpath('/users'));
Expected result:
----------------
bool(true)
Actual result:
--------------
bool(false)
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=67220&edit=1