标签:for eclipse VID blog lips 相对路径 http relative bsp
* 相对路径 -> 绝对路径 realpath
<?php
/**
* @param string $in_rel: relative directory
* @param string $out_abs: absolute directory
*/
define(‘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 = []; // divide 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就可以了,为什么多此一举?
* 绝对路径 -> 相对路径
... [TO BE DONE]
标签:for eclipse VID blog lips 相对路径 http relative bsp
原文地址:https://www.cnblogs.com/mingzhanghui/p/9434337.html