Str.php

    private static function replaceChar($subject, $search, $replace) {
        for ($i = 0; isset($subject[$i]); $i++) {
            if ($subject[$i] == $search) {
                $subject[$i] = $replace;
            }
        }
        return $subject;
    }

    private static function join(string $sep, array $arr) {
        if (empty($arr)) {return "";}
        $s = $arr[0];
        $n = count($arr);
        for ($i = 1; $i < $n; $i++) {
            $s .= $sep.$arr[$i];
        }
        return $s;
    }

    public static function absPath($path) {
        if (DIRECTORY_SEPARATOR === '/') {
            $root = "/";
        } else {
            $path = self::replaceChar($path, DIRECTORY_SEPARATOR, '/');
            $root = "";
        }
        $a = [];
        $el = "";
        $lastChar = '\0';
        for ($i = 0; isset($path[$i]); $i++) {
            if ($path[$i] == '.') {
                if ($lastChar == '.') {
                    array_pop($a);
                } else {
                    $el .= $path[$i];
                }
            } else if ($path[$i] == '/') {
                if ($lastChar != '.' && $el) {
                    array_push($a, $el);
                }
                $el = "";
            } else {
                $el .= $path[$i];
            }
            $lastChar = $path[$i];
        }
        array_push($a, $el);
        $path = $root.self::join(DIRECTORY_SEPARATOR, $a);

        return $path;
    }

 

windows环境 is_file 始终false, 中文名utf-8 需要转换为gb2312

iconv("UTF-8","GB2312//IGNORE",$data);