这篇文章主要介绍PHP如何转换成绝对路径,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php转换成绝对路径的实现方法:1、创建一个PHP示例文件;2、通过“function sub_rel2abs(string $i
这篇文章主要介绍PHP如何转换成绝对路径,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
php转换成绝对路径的实现方法:1、创建一个PHP示例文件;2、通过“function sub_rel2abs(string $in_rel, string &$out_abs) {...}”方法将相对路径转换成绝对路径即可。
本文操作环境:windows7系统、PHP7.4版、DELL G3电脑
PHP 相对路径转换为绝对路径 realpath
* 相对路径 -> 绝对路径 realpath
<?phpdefine('PATH_MAX', 255);function sub_rel2abs(string $in_rel, string &$out_abs) { $i_rtn = 0; // return value $ss_rel = ""; // for relative path build $st_fpos = 0; // front separator index $sv_path = []; // pide path to array $st_pos = strpos($in_rel, DIRECTORY_SEPARATOR); $npos = 0; while ($npos != $st_pos) { if ($st_pos != 0) { array_push($sv_path, substr($in_rel, $st_fpos, $st_pos - $st_fpos)); }// next... $st_fpos = $st_pos; // set current pos to last pos $st_pos++; // from next index $st_pos = strpos($in_rel, DIRECTORY_SEPARATOR, $st_pos); // next separator index } // while ( $npos != $st_pos )// final separator array_push($sv_path, substr($in_rel, $st_fpos)); $lpc = 0; // loop count $i_max = count($sv_path); while ($lpc < $i_max && 0 === $i_rtn) { $ss_rel .= $sv_path[$lpc];// relative path => relative path $c_abs = realpath($ss_rel); if ($c_abs === false) { $i_rtn = -1; } else { $ss_rel = $c_abs; $i_rtn = 0; } $lpc++; } // while (count($sv_path)>0)// nORMal ending if (0===$i_rtn) { $out_abs = $ss_rel; // set converted path } return $i_rtn;}// test$inDir = "/Users/Mch/Code/php/Directory";is_dir($inDir) || mkdir($inDir, 0777, true);$wd = __DIR__;chdir($inDir);$out = "";echo sub_rel2abs("../../../eclipse-workspace/blog.zip", $out).PHP_EOL;echo $out.PHP_EOL;chdir($wd);@rmdir($inDir);
output:
0/Users/Mch/eclipse-workspace/blog.zip
这里直接realpath就可以了,为什么多此一举?
* 绝对路径 -> 相对路径
<?phpfunction abs2rel(string $base, string $path) { if (is_dir($base)) { $base = rtrim($base, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . "."; } $a = explode(DIRECTORY_SEPARATOR, $base); $b = explode(DIRECTORY_SEPARATOR, $path); $d = []; // $path push $i = count($a)-1; $sliceEquals = function($a, $b, $j) { if ($j >= count($a) || $j >= count($b)) { throw new Exception('$j out of range'); } for ($i = $j; $i >= 0; $i--) { if (strcmp($b[$i], $a[$i])!==0) { return false; } } return true; }; // 找到a,b数组元素相同的下标 while (array_pop($a)) { $i = count($a)-1; if (isset($b[$i])) { if ($sliceEquals($a, $b, $i)) { break; } } array_push($d, ".."); } // 从首个不同元素开始 for ($i+=1; $i < count($b); $i++) { array_push($d, $b[$i]); } return ".".DIRECTORY_SEPARATOR.implode(DIRECTORY_SEPARATOR, $d);}
以上是“php如何转换成绝对路径”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网PHP编程频道!
--结束END--
本文标题: php如何转换成绝对路径
本文链接: https://lsjlt.com/news/301064.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0