生活随笔
收集整理的這篇文章主要介紹了
php计算相对路径
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
計(jì)算兩個(gè)目錄的相對(duì)路徑,網(wǎng)上有好多代碼,發(fā)現(xiàn)好多是用array_diff_assoc這個(gè)函數(shù),這樣不對(duì).
我來(lái)寫一個(gè)簡(jiǎn)單的.
https://segmentfault.com/a/1190000021291646
<?php
/*** Created by PhpStorm.* User: 優(yōu)美代碼* Date: 2019/9/9* Time: 19:59*/function getPath($path1, $path2)
{//是否是真實(shí)的路徑格式 這里省略判斷了,//兩個(gè)文件相同時(shí)候,直接返回錯(cuò)誤if ($path1 == $path2) {return false;}$arr1 = explode('/', $path1);$arr2 = explode('/', $path2);$count1 = count($arr1);for ($i = 0; $i < $count1; $i++) {//因?yàn)楦夸浂际情_始"/"開始的.比較到不一致時(shí)候終止,if ($arr1[$i] !== $arr2[$i]) {break;}}//需要回退的次數(shù)$back_num = $count1 - $i - 1;//回退到交叉點(diǎn)if ($back_num == 0) {$back_str = './';} else {$back_str = str_repeat('../', $back_num);}//刪除第二個(gè)路徑中,與第一個(gè)路徑里相同的部分//也就是刪掉交叉點(diǎn)和前面的東西array_splice($arr2, 0, $i);$path2 = implode('/', $arr2);//組合起來(lái)return $back_str . $path2;
}$path1 = '/data/www/app/book/a/d/a.php';
$path2 = '/data/app/app/book/b.php';$path1 = '/data/www/app1/shop/model/index.php';
$path2 = '/data/www/app1/user.php';echo getPath($path1, $path2);
說(shuō)說(shuō)代碼原理:
給出兩個(gè)路徑
a是 /data/www/app1/shop/model/index.php
b是 /data/www/app1/user/model/ok/user.php
兩個(gè)路徑啊a,b,想象成兩條河流, 有一個(gè)共同的源頭是根目錄 /,還有一個(gè)分支點(diǎn) app1
分析第一個(gè)路徑,
找到分支點(diǎn) app1,從分支點(diǎn)開始數(shù)目錄層次深度是m,
這樣用m個(gè)…/拼起來(lái),就返回到分支點(diǎn)app1,
第二個(gè)路徑的交匯點(diǎn)之后的路徑"user/model/ok/user.php"
組成了 …/…/user/model/ok/user.php
這就是b相對(duì)于a的,相對(duì)路徑了 (在a文件中 引入b文件,用到的)
來(lái)自:優(yōu)美代碼.
https://segmentfault.com/a/1190000021291646
總結(jié)
以上是生活随笔為你收集整理的php计算相对路径的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。