PHP 경로 변환 방법: 1. "function sub_rel2abs(string $in_rel, string &$out_abs)" 방법을 사용하여 상대 경로를 절대 경로로 변환합니다. 2. "abs2rel" 방법을 사용하여 절대 경로를 다음 경로로 변환합니다. 상대 경로.
추천: "PHP 비디오 튜토리얼"
PHP 상대 경로를 절대 경로로 변환 realpath
* 상대 경로 -> 절대 경로 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:
/Users/Mch/eclipse-workspace/blog.zip
여기에서 직접 realpath를 사용할 수 있습니다. 왜 불필요한가요?
* 절대 경로-> 상대 경로
<?php /** * $path相对于$base的相对路径 * @param string $base * @param string $path */ function 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!