2011-07-28 120 views
0

我正在Codeigniter 2.0.2中開發我的第一個應用程序,並且我遇到了一個小問題,我似乎無法在Web上找到任何有關信息。將服務器文件路徑轉換爲Codeigniter中的URL

該應用程序圍繞存儲在本地服務器上的資源(即圖像和音頻文件)需要暴露給用戶。這些資源的位置作爲絕對路徑存儲在數據庫中。因此,我發現自己需要經常將服務器路徑翻譯成基於base_url的URL。

我已經寫了一個簡單而強大的函數來處理它,但是對於CI(URL,路徑)中所有看起來相關的幫助者,我不能動搖我剛剛重新發明輪子的感覺。

至少,我認爲會有某種CI功能(比如,「鹼化」),將翻譯,像這樣的任何服務器路徑到BASE_URL相對路徑:

$server_path = '/server/path/to/app/resources/image.jpg'; 
basify($server_path); // returns 'resources/image.jpg' or './resources/image.jpg' 

其中CI應用程序位於/ server/path/to/app中。然後,調用base_url()來創建URL。

這樣的事情是否存在?

編輯:是的,我知道一個簡單的preg_replace將爲我處理大多數情況(至少那些資源位於基本路徑內的情況),但我覺得這應該是CI的工作,而不是我的!我使用它的一半原因是因爲我不想考慮路徑管理。

+0

我不認爲有任何CI會爲你做這件事,所以像你已經做過的助手之一擴展可能是你最好的選擇。如果您向用戶顯示文件信息,請務必查看文件助手。 –

回答

0

也許你可以使用php函數str_replace和codeigniter FCPATH常量。
您的代碼將是:

function basify($image_path) { 
    return str_replace(FCPATH, '', $image_path); 
} 

FCPATH不變的是新的給我,但我已經做了一些測試,它工作正常。

+0

是的,這是實現它的一種方式,但它只適用於絕對路徑,它是FCPATH的子目錄。我可以假設所有相對路徑都與FCPATH相關,然後聲明任何絕對路徑必須在FCPATH下(這可能是很好的設計),但是這些是我希望CI通過幫助程序標準化的那些決策。 – Gregarious