On 02/04/2017 09:09, Fleshgrinder wrote:
Your strategy works in these examples, but the example I gave was
different. Imagine that we have `/a/b/../c` which we would normalize to
`/a/c`. However, the `b` component is actually a symbolic link to `x/y`.
Hence, the real version of the path is `/a/x/c` and not `/a/c` as we
would have normalized it to.

Both strategies are equally valid, as long as you know which is in use. There are many common tools outside PHP which use both approaches, and situations where you might actually want the string-based approach, even if filesystem access is available.

See for instance this discussion of pwd: http://unix.stackexchange.com/q/331208/70530 In summary, POSIX specifies "-L" (logical) which uses $PWD as set by the shell as you navigate, and "-P" (physical) which resolves backwards through the ".." links in the file system.

The same is true for other operations - for instance, the below demo in bash shows one interpretation in "ls" and the other in "cd".


/tmp/demo$ ls -lR
.:
drwxr-xr-x 2 vagrant vagrant 4096 Apr  2 18:21 foo
drwxr-xr-x 3 vagrant vagrant 4096 Apr  2 18:05 other

./foo:
lrwxrwxrwx 1 vagrant vagrant 21 Apr  2 18:21 bar -> /tmp/demo/other/thing

./other:
drwxr-xr-x 2 vagrant vagrant 4096 Apr  2 18:06 thing

/tmp/demo$ ls foo/bar/..
thing

/tmp/demo$ cd foo/bar/..
/tmp/demo/foo$ ls
bar

Regards,

--
Rowan Collins
[IMSoP]


--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to