目录递归和相对路径函数

获取两个文件相对路径,例如:
$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;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值