爲什麼你的語言在系統文件夾中應該在application/language
文件夾中,而且它不是一個真棒d想法由用戶上傳語言。它是一個很大的SECURITY HOLE
,因爲任何人都可以上傳任何腳本,並且將由您的代碼執行。你永遠不應該允許上傳你的系統中的任何可執行代碼。
如果你上傳一個破損的文件,會導致php錯誤。所以當出現php錯誤時,codeigniter無法對此做任何事情。只是簡單地認爲你通常包括一個PHP文件,你會爲任何PHP做。所以CI做同樣的事情,然後閱讀一些變量($lang
),併爲其分配一個類別。
是的,你可以用你定義的文件夾來加載,你可以在幾個方式做到這一點的語言
$this->load->add_package_path('YOUR_PATH');
//so your language will be YOUR_PATH/language/YOUR_LANG_FOLDER(english default)
$this->load->language('language_file'); //user
OR
$this->lang->load('YOUR_LANG_FILE','LANG',FALSE,TRUE,'YOUR_PATH') ;
//look the function description
/**
* Load a language file
*
* @access public
* @param mixed the name of the language file to be loaded. Can be an array
* @param string the language (english, etc.)
* @param bool return loaded array of translations
* @param bool add suffix to $langfile
* @param string alternative path to look for language file
* @return mixed
*/
OR extend the CI_Lang and modify the load function they way you want, to do this you have to create a file `application/core/MY_Lang.php`
class MY_Lang extends CI_Lang {
//OVERWRITE THE FUNCTION
function load($langfile = '', $idiom = '', $return = FALSE, $add_suffix = TRUE, $alt_path = ''){
//MODIFY THE THE CODE FOMR CI_Lang AND SET THE INCLUDE PATH AS YOU WANT
}
}
好了,但沒有最終用戶會上傳文件,只有系統管理員,圍繞孔這不是問題,可以將lang放在其他文件夾中,或者我可以直接上傳到系統文件夾,CI是否允許上傳到系統文件夾? – Schneider
我確實修改了我的答案,當你指的是系統文件夾時,你的意思是應用程序文件夾。你不應該把你的代碼寫在系統文件夾中,系統文件夾應該有所有的CI代碼,你應該根據需要擴展你的應用程序中的類。是的,你可以上傳任何你想要它依賴於你和你設置上傳路徑的方式 – Minhaz