2011-04-21 73 views
3

我已經用戶選擇的文件的路徑的後端,我已經等的輸入:爆炸包含到文件的路徑的變化的文件名的字符串,並重建所述路徑

/images/soccer/2010-2011/last_match/image_example.jpg 

然後,在我的PHP應用程序中,我需要更改「image_example」,因爲我爲防止問題編碼名稱。我用最後一個「。」分割文件名。從擴展名分離名稱,然後我返回新的圖像名稱和擴展名......但我不知道如何識別路線,分隔名稱,然後重寫路線。

所以worflow將是這樣的:

  1. 用戶輸入的路線。
  2. 應用程序標識圖像名稱。
  3. 我調用一個函數,而不是改變名字。
  4. 重建最終複製/移動的旋轉。

任何人都可以幫助我嗎?

預先感謝您!

+1

這是神祕的。你想要什麼結果?移動現有文件並獲取新文件名的路徑? – Capsule 2011-04-21 13:57:46

+0

對於正則表達式來說不太好,但在我看來,最簡單的方法是找到'/'和'。'之間存在的所有字符,而沒有額外的'/' – 2011-04-21 13:58:53

+0

對不起,對於解釋,英語不是我的主要語言。基本上我有一個輸入像'/ images/soccer/2010-2011/last_match/image_example。jpg',我必須將圖像名稱更改爲另一個,最後得到如下內容:'/ images/soccer/2010-2011/last_match/CHANGEDNAME_SAMEROUTE.jpg'。先謝謝你 – udexter 2011-04-21 14:01:51

回答

5

您可以使用PHP的pathinfo功能將文件路徑拆分成它的組成部分。就像這樣:

$path_parts = pathinfo('/images/soccer/2010-2011/last_match/image_example.jpg'); 

結果數組是這樣的:

Array 
(
    [dirname] => /images/soccer/2010-2011/last_match 
    [basename] => image_example.jpg 
    [extension] => jpg 
    [filename] => image_example 
) 

有了這些信息,那麼你可以放在一起你的新路徑:

$new_path = $path_parts['dirname'] . '/CHANGEDNAME_SAMEROUTE.' . 
     $path_parts['extension']; 
1

我認爲這是你想要完成的?

$sImageLocation = "/images/soccer/2010-2011/last_match/image_example.jpg"; 
$sPath = substr($sImageLocation, 0, strrpos($sImageLocation, "/")+1); 
$sNewImageLocation = $sPath."image_new.jpg"; 

echo $sNewImageLocation; 
// will output: /images/soccer/2010-2011/last_match/image_new.jpg 
1

嘗試是沿着這樣的路線:

$route = '/images/soccer/2010-2011/last_match/image_example.jpg'; 
preg_match('/^(.*?\/)([^.\/]*)(\.[a-z]*)$/', $route, $matches); 
$route[1] = your_function($route[1]); 
$route = implode($matches); 

首先,它除了需要您的路線用正則表達式,你的函數適用於路線的文件名部分,然後重新組裝它。

(正則表達式可能不是最好的選擇,但我認爲它的工作。)

0

如果你只是想改變最後一部分的路線/網址,那麼這可能是最懶的選項:

$route = preg_replace("#(?<=/)\w+\.(jpe?g|png|gif|webp)$#", 
         "NEWNAME.$1", $route); 

如果文件名可以包含字母/數字/下劃線以外的其他符號,則使用[^/]+而不是\w+。如果必須的話,還要調整可接受的擴展名列表。

相關問題