获取两个文件相对路径,例如:
$a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php';
计算出 $b 相对于 $a 的相对路径应该是 ../../c/d
方法一:
function getRelativePath($a, $b) { for($i=0;$i<strlen($a);$i++) { if($a{$i} !== $b{$i}) { $stra = substr($a, $i); $strb = substr($b, $i); break; } } $arra = explode("/", $stra); $arrb = explode("/", $strb); $str = str_repeat("../", count($arrb) - 1) . implode("/", array_splice($arra, 0, count($arra) -1)); return $str; }
方法二
function get_path($path1, $path2) { $path1 = trim($path1, "/"); $path2 = trim($path2, "/"); $arr = explode("/", $path1); $index = -1; foreach ($arr as $val) { if(@strpos($path2, $val) > -1) { $path2 = str_replace("/{$val}", "", $path2); $index++; } } //echo count($arr); $dir = $index == count($arr)-1 ? "" : implode("/", array_slice($arr, $index, count($arr) - $index - 1)); $arr2 = explode("/", $path2); $count = count($arr2) -1; $updir = ""; for ($i=0; $i<$count; $i++) { $updir .= "../"; } return $updir.$dir; }
目录递归读取
方法-:
function getFiles($dir, $i=-1) { $arrRec = array(); $dir = rtrim($dir, "/") . "/"; if(is_dir($dir)){ $i++; echo str_repeat(" ", $i*3), "|-", trim(strrchr(trim($dir, "/"), "/"), "/"), "\n"; $arr = glob($dir . "*"); foreach ($arr as $value) { if (is_dir($value . "/")) { $arrRec[$value] = getFiles($value, $i); } else { $arrRec[] = $value; echo str_repeat(" ", $i*3), "|-", trim(strrchr(trim($value, "/"), "/"), "/"), "\n"; } } } return $arrRec; }
function getFiles2($dir, $i=-1){ $arrRec = array(); $dir = rtrim($dir, "/") . "/"; if(is_dir($dir)){ $i++; echo str_repeat(" ", $i*3), "|-", trim(strrchr(trim($dir, "/"), "/"), "/"), "\n"; $arr = scandir($dir); if($arr){ foreach ($arr as $value){ if($value == "." || $value == "..") { continue; } else if(is_dir($dir.$value)) { $arrRec[$dir.$value] = getFiles2($dir.$value, $i); } else { $arrRec[] = $value; echo str_repeat(" ", $i*3), "|-", $value, "\n"; } } } } return $arrRec; }
function getFiles3($dir, $i=-1) { $arrRec = array(); $dir = rtrim($dir, "/") . "/"; if ( $handle = opendir($dir) ) { $i++; echo str_repeat(" ", $i*3), "|-", trim(strrchr(trim($dir, "/"), "/"), "/"), "\n"; while ( ($file = readdir($handle)) !== false ) { if ( $file != ".." && $file != "." ) { if ( is_dir($dir.$file) ) { $arrRec[$dir.$file] = getFiles3($dir . "/" . $file, $i); }else { $arrRec[] = $file; echo str_repeat(" ", $i*3), "|-", $file, "\n"; } } } closedir($handle); return $arrRec; } }