php – 解决非??现有文件的相对路径(如realpath)的最佳方式是什
发布时间:2020-12-13 16:24:38 所属栏目:PHP教程 来源:网络整理
导读:我试图在文件系统抽象中强制执行根目录.我遇到的问题如下: API允许您读取和写入文件,而不仅仅是本地的,也是远程的存储.所以在引擎盖下有各种规范化.目前它不支持相对路径,所以这样的事情是不可能的: $filesystem-write('path/to/some/../relative/file.txt
我试图在文件系统抽象中强制执行根目录.我遇到的问题如下:
API允许您读取和写入文件,而不仅仅是本地的,也是远程的存储.所以在引擎盖下有各种规范化.目前它不支持相对路径,所以这样的事情是不可能的: $filesystem->write('path/to/some/../relative/file.txt','file contents'); 我想要能够安全地解决路径,因此输出将是:path / to / relative / file.txt. 另外,由于该包处理远程文件系统和不存在的文件,所以realpath不成问题. 那么在处理这些路径时应该如何呢?
我已经解决了如何做到这一点,这是我的解决方案:
/** * Normalize path * * @param string $path * @param string $separator * @return string normalized path */ public function normalizePath($path,$separator = '/') { // Remove any kind of funky unicode whitespace $normalized = preg_replace('#p{C}+|^./#u','',$path); // Path remove self referring paths ("/./"). $normalized = preg_replace('#/.(?=/)|^./|./$#',$normalized); // Regex for resolving relative paths $regex = '#/*[^/.]+/..#Uu'; while (preg_match($regex,$normalized)) { $normalized = preg_replace($regex,$normalized); } if (preg_match('#/.{2}|.{2}/#',$normalized)) { throw new LogicException('Path is outside of the defined root,path: [' . $path . '],resolved: [' . $normalized . ']'); } return trim($normalized,$separator); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |