2011-09-07 151 views
0

比方說,我有一個絕對路徑:/myproject/web/uploads/myfolder/myfile.jpgPHP,最簡單的方法找到一個絕對路徑的相對路徑

我尋找到確定的相對路徑的FOM的絕對路徑的一部分,就像這樣:

<?php 

echo relative_path('/myproject/web/uploads/myfolder/myfile.jpg', 'web/uploads'); 

// print "myfolder/myfile.jpg" 
+0

我不明白,你怎麼能從路徑的一部分關聯到相對路徑? – powtac

+2

請在你的理解中定義相對路徑 – ajreal

+2

答案是什麼:'relative_path('/ myproject/web/uploads/myfolder/backup/2/web/uploads/myfolder/myfile.jpg','web/uploads') ;' – webbiedave

回答

1

如果我明白,你只是想將部件從絕對路徑是在給定部分之後:

function relative_path($absolute, $part) { 
    $pos = strpos($absolute, $part); 
    return substr($absolute, $pos + strlen($part) + 1); 
} 
+0

優雅,如此簡單,做得好! – julesbou

1

如何:

function relative_path ($absolute, $part) { 
    return (($rel = strstr($absolute, $part)) !== FALSE) ? ltrim(substr($rel, strlen($part)),'/') : FALSE; 
} 

返回具有相對路徑的字符串(如上所述)或FALSE上失敗。

這個函數決不是萬無一失的,因爲任何試圖執行上述任務的函數都是可以的。考慮以下幾點:

$absolute = "/dir/someplace/dir/someplace/somedir/file.ext"; 
$part = "dir/someplace"; 

// Returns "dir/someplace/somedir/file.ext" when you may in fact want "somedir/file.ext" 
relative_path($absolute, $part); 

我懷疑你真正需要做的是在這裏重新思考什麼你實際上是試圖做...

+0

作品,但我更喜歡簡單的@ arnaud576875,無論如何感謝 – julesbou