Dalam PHP, apakah ada cara bawaan untuk menyelesaikan suatu jalur relatif terhadap yang lain?
Misalnya, dengan $baseDir
dir: /home/ben/project
, $path
berikut harus diselesaikan menjadi:
/foo/bar
→/foo/bar
../foo/bar
, →/home/ben/foo/bar
Solusi yang terlintas dalam pikiran:
Mengubah sementara direktori kerja saat ini, dan menggunakan
realpath()
:$currentDir = getcwd(); chdir($baseDir); $resolvedPath = realpath($path); chdir($currentDir); return $resolvedPath;
Solusi ini agak membosankan.
Memeriksa apakah jalurnya absolut, jika tidak, menggunakan
realpath()
:if ($path[0] === '/') { return $path; } return realpath($currentDir . '/' . $path);
Solusi ini bukan lintas platform; menjadikannya lintas platform dengan aman mungkin tidak sepele seperti yang terlihat.
Terakhir, realpath()
mengembalikan false
ketika jalur tidak ada, yang tidak diperhitungkan dalam kode di atas, dan mungkin menjadi masalah dalam beberapa kasus penggunaan.
Apakah saya melewatkan sesuatu?
C:\
, bukan/
. Dan saya tidak yakin dengan OS lain. - person BenMorel   schedule 01.08.2019/
juga berfungsi pada Windows. Masalahnya adalah memeriksa dengan andal apakah suatu jalur bersifat absolut atau relatif. - person BenMorel   schedule 01.08.2019