計算兩個路徑的父親路徑
計算/a/b/c/d/e.php /a/b/12/34/c.php的父親路徑為/a/b
- <?php
- /*
- *系統環境:windows/linux
- *編譯環境:php5/php4
- *輸入引數:存放在in.txt,多個引數時空格分隔
- 引數1是一個路徑,用或者/分隔
- 引數2是一個路徑,用或者/分隔
- 引數1,2必須都是絕對路徑或者相對路徑
- 例如:/a/b/c/d/e.php /a/b/12/34/c.php
- d:acde.php d:a1234/c.php
- a/b/c/d/e.php a/b/12/34/c.php
- 輸出:out.txt
- */
- $params=getParams(2);
- $toParh=trim($params[0]);
- $fromParh=trim($params[1]);
- $toParh=str_replace(“\”, “/”, $toParh);
- $fromParh=str_replace(“\”, “/”, $fromParh);
- //linux形式
- if(substr($toParh, 0,1)==“/” || substr($fromParh, 0,1)==“/”)
- {
- if(!substr($toParh, 0,1)==“/”)
- {
- //若是$toParh是絕對路徑,而$fromParh不是絕對路徑,報錯
-
error_msg(“兩個引數必須都是絕對路徑或者相對路徑
“); - }
- if(!substr($fromParh, 0,1)==“/”)
- {
- //若是$toParh是絕對路徑,而$fromParh不是絕對路徑,報錯
-
error_msg(“兩個引數必須都是絕對路徑或者相對路徑
“); - }
- }
- //windows形式
- if(preg_match(“/^[a-z]:/i”, $toParh) || preg_match(“/^[a-z]:/i”, $fromParh))
- {
- if(!preg_match(“/^([a-z]):/i”, $toParh,$matchs1))
- {
- //若是$toParh是絕對路徑,而$fromParh不是絕對路徑,報錯
-
error_msg(“兩個引數必須都是絕對路徑或者相對路徑
“); - }
- if(!preg_match(“/^([a-z]):/i”, $fromParh,$matchs2))
- {
- //若是$toParh是絕對路徑,而$fromParh不是絕對路徑,報錯
-
error_msg(“兩個引數必須都是絕對路徑或者相對路徑
“); - }
- if($matchs1[1]!=$matchs2[1])
- {
- //若是$toParh和$fromParh不在同一個盤裡
-
error_msg(“兩個引數必須都是在同一個盤裡
“); - }
- }
- echo getRalationPath($toParh,$fromParh);
- function getRalationPath($toParh,$fromParh)
- {
- $toParh=str_replace(“\”, “/”, $toParh);
- $fromParh=str_replace(“\”, “/”, $fromParh);
- $topaths=split(“/”,$toParh);
- $fromparhs=split(“/”,$fromParh);
- array_pop($fromparhs);
- array_pop($topaths);
- $relationPath=“”;
- //去掉相同目錄後,計算需要往上的目錄級數
- $n=count(array_diff_assoc ($fromparhs,$topaths));
- for($i=0;$i< $n;$i++)
- {
- $relationPath.=“../”;
- }
- //去掉相同目錄後,需要深入的目錄
- $digdir=array_diff_assoc ($topaths,$fromparhs);
- $relationPath.=join(“/”,$digdir);
- return $relationPath;
- }
- /*
- 從in.txt裡讀取引數
- */
- function getParams($paramNum)
- {
- $in=file_get_contents(“in.txt”);
- if($in===FALSE){
-
error_msg(“cannot read in.txt,please check in.txt exists
“); - }
- $in=preg_replace(“/(s+)/i”, ” “, $in);
- //多個引數時,按照空格分隔
- $parms=split(” “,trim($in));
- if($parms===FALSE)
- {
-
error_msg(“cannot get param from in.txt
“); - }
- if(count($parms) < $paramNum)
- {
-
error_msg(“it needs $paramNum params
“); - }
- return $parms;
- }
- /*
- 把結果輸出到輸出檔案裡
- 當isClean=true時清空out.txt
- */
- function output($msg,$isClean=false)
- {
- if($isClean)
- {
- $handle = fopen(`out.txt`, `w`);
- fclose($handle);
- }
-
error_log($msg.”
“, 3, “out.txt”); - }
- /*
- 輸入錯誤資訊
- 如果$is_exit表示輸入資訊後退出
- */
- function error_msg($msg,$is_exit=true)
- {
- if($is_exit)
-
die($msg.”
“); - else
-
echo $msg.”
“; - }
- ?>
本文轉自yifangyou 51CTO部落格,原文連結: 本文轉自yifangyou 51CTO部落格,原文連結:,如需轉載請自行聯絡原作者
,如需轉載請自行聯絡原作者
相關文章
- PHP 計算兩個檔案的相對路徑PHP
- 計算upload路徑
- 兩個路徑下的iptables的區別
- golang 獲取當前路徑和上一級父路徑(目錄)Golang
- 雲端計算面試題:檔案定位路徑面試題
- 6754 路徑計數
- html中的路徑的介紹:絕對路徑和相對路徑HTML
- Xcode外掛路徑、快取路徑、圖片壓縮工具路徑、程式碼片段路徑、symbolicatecrash路徑XCode快取Symbol
- 尋找兩條最短路的公共路徑
- Linux檔案的路徑定位-相對路徑和絕對路徑Linux
- canvas 路徑與子路徑Canvas
- 檔案的相對路徑和絕對路徑以及根相對路徑
- nginx 從一個路徑訪問另一個路徑怎麼跳轉Nginx
- 絕對路徑和相對路徑的區別,
- 絕對路徑和相對路徑的區別
- Qt的相對路徑轉為絕對路徑QT
- JAVA 取得當前目錄的路徑/Servlet/class/檔案路徑/web路徑/url地址JavaServletWeb
- HTML絕對路徑與相對路徑HTML
- 教你輕鬆計算AOE閘道器鍵路徑(轉)
- canvas路徑與子路徑詳解Canvas
- Unity中的光源型別(向前渲染路徑進行光照計算)Unity型別
- 獲取沙盒檔案路徑的兩種方法
- 尤拉路徑
- struts/Servlet,action轉到jsp後,路徑問題(struts2,jsp路徑,action路徑,action跳轉,相對路徑,絕對路徑)...ServletJS
- 好程式設計師web前端分享絕對路徑與相對路徑的引用程式設計師Web前端
- 檔案絕對路徑和相對路徑
- Java工程路徑及相對路徑(轉載)Java
- Jsp相對路徑和絕對路徑JS
- oracle11g trace路徑和diagnostics路徑的變化Oracle
- Floyd演算法(計算最短路徑)演算法
- 深入解析Java絕對路徑與相對路徑Java
- nodejs路徑處理方法和絕對路徑NodeJS
- 【MFC】BROWSEINFO設定路徑,支援記憶上次路徑
- javascript將相對路徑修改為絕對路徑JavaScript
- 好程式設計師分享html圖片絕對路徑改相對路徑程式設計師HTML
- web專案絕對路徑與相對路徑的問題Web
- Flutter——路徑裁剪Flutter
- JS Cookie 路徑JSCookie