如果存在,则包含变量页面

时间:2015-08-27 15:48:36

标签: php

我有多语言:

     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:?

我希望你能理解这个问题。

3 个答案:

答案 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