On 4/2/2017 8:28 PM, Rowan Collins wrote: > 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, >
I get your point, and I have to agree here. `normalize_path`/`Path::normalize` would be the counterpart to `realpath`/`Path::canonicalize`. 👍 -- Richard "Fleshgrinder" Fussenegger
signature.asc
Description: OpenPGP digital signature