[摘要]本篇文章给大家带来的内容是关于PHP通过 realpath将相对路径转换为绝对路径的代码实例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。相对路径 -> 绝对路径:<?...
本篇文章给大家带来的内容是关于PHP通过 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 = []; // 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);
?>