2009-11-18 30 views
0

喜歡的東西:如何在PHP中進行文件路徑操作?

/directory/a/b - /directory/ = a/b 

是否可以很容易地做到這一點?

+0

取決於正是你想做的事,一個簡單的正則表達式或str_replace函數就可以了 – 2009-11-18 02:27:16

回答

0
echo str_replace("/directory/","","/directory/a/b"); 

,並使用此對其他類型的字符串,您的滿弦進入第三個參數,不管你是「減」去作爲第一個參數。

+0

-1編寫的解決方案用於粘貼代碼,而不是閱讀的問題 - OP希望某些東西能夠與路徑一起工作,而不是簡單的字符串替換,這是我閱讀它的方式。 – 2009-11-18 02:41:48

1

由於您正在使用路徑,因此平臺敏感性非常重要; Windows具有與大多數其他平臺不同的路徑分隔符,並且編寫可重用的代碼,因此無法平息平臺。

PHP有幾個函數來處理路徑。如果您遞交了一個非常奇怪的路徑,如~foo/bar//bitty/../index.php,請使用realpath爲您清理。

$path = realpath("~foo/bar//bitty/../index.php"); 
/* output: /home/foo/bar/index.php */ 

其他功能將幫助您 - 例如,獲得自身的文件名的路徑部分,使用dirname

print dirname($path); 
/* output: /home/foo/bar */ 

一旦你的,對隔板分開,做任何你想要的工作。真正的訣竅是讓PHP擔心所有的路徑奇怪,然後分別與每個部分一起工作。請同時查看pathinfobasename。我認爲這是你要求的,而不是如何做啞字符串替換。

不要忘記不允許注入您的應用程序!使用來自Web輸入的路徑是危險的。永遠不要相信用戶輸入

+0

但似乎你沒有涉及如何以一般的方式做減法路徑? – Mask 2009-11-18 03:01:47

0

使用dirname()函數和一些字符串,可以將原始路徑剪切並獲取塊。

<?php 
// from: http://php.net/manual/en/function.dirname.php 
$path = "/dirname/a/b"; 
$dir = dirname(dirname($path)); 
echo "dir at front=$dir\n"; 
$len = strlen($dir); 
$dirname = substr ($path, 0, $len+1); 
echo "dirname=$dirname\n"; 
$last_2 = substr ($path, $len+1); 
echo "last_2=$last_2\n"; 
?> 

結果

$ php x.php 
dir at front=/dirname 
dirname=/dirname/ 
last_2=a/b