我有多语言:
switch ($lang) {
case 'en':
$lang_file = 'en.php';
break;
case 'lt':
$lang_file = 'lt.php';
break;
case 'pl':
$lang_file = 'pl.php';
break;
//case 'es':
// $lang_file = 'lang.es.php';
//break;
default:
$_SESSION['lang'] = "en";
$lang_file = 'en.php';
}
include_once 'lang/'.$lang_file;
require('includes/config.php');
但我必须输入所有代码才能手动包含语言文件
有没有办法通过变量包含它?
我的意思是index.php?lang=de
并且系统检查de.php
文件夹中是否存在文件lang
。如果它存在,则它用作Case de
或如果它不存在,则使用Default:?
我希望你能理解这个问题。
答案 0 :(得分:0)
您可以使用file_exists()功能。
请注意,您应该使用所有语言代码创建白名单数组,以提高安全性。
答案 1 :(得分:0)
从url获取变量名称,如果没有,则检查文件是否存在,然后包含en.php。您必须提供检查文件是否存在的根路径
var i, retcode;
var report;
var macrolist = new Array();
if (iimPlayCode('TAG POS=1 TYPE=A ATTR=TXT:"some text" CONTENT=EVENT:FAIL_IF_FOUND') == 1) {
macrolist.push("secondmacro.iim");
}
else
{
macrolist.push("firstmacro.iim");
}
答案 2 :(得分:0)
@George是正确的但存在安全风险。 我可以花一天时间猜测文件名,然后慢慢将整个网站映射出来。
或者想象一下,如果网址是index.php?lang = .. / index。 你自己会DOS。
一些额外的安全性是拥有允许的语言文件列表。
$arrayAllowedLanguages = array('en', 'lt', 'pl');
if(in_array($lang, $arrayAllowedLanguages)){
$lang_file = 'lang/' . $lang . '.php';
if(file_exists( $lang_file )){
include_once( $lang_file );
}else{
include_once( 'lang/en.php' );
}
}
<强>更新强>
查看此维基上的RFI / LFI安全风险。 Wikipedia LFI/RFI