php – 解决非​​现有文件的相对路径(如realpath)的最佳方式是什么?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 解决非​​现有文件的相对路径(如realpath)的最佳方式是什么?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在文件系统抽象中强制执行根目录.我遇到的问题如下:

API允许您读取和写入文件,而不仅仅是本地的,也是远程的存储.所以在引擎盖下有各种规范化.目前它不支持相对路径,所以这样的事情是不可能的:

$filesystem->wrITe('path/to/some/../relative/file.txt','file contents');

我想要能够安全地解决路径,因此输出将是:path / to / relative / file.txt.
正如在这个bug /增强(@L_304_7@)创建的github问题中所说的,它需要做更多的事情,只需要分割段并相应地删除它们.

另外,由于该包处理远程文件系统和不存在的文件,所以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);
}

脚本宝典总结

以上是脚本宝典为你收集整理的php – 解决非​​现有文件的相对路径(如realpath)的最佳方式是什么?全部内容,希望文章能够帮你解决php – 解决非​​现有文件的相对路径(如realpath)的最佳方式是什么?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。