Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一种较短的语言检测算法_Php_Url - Fatal编程技术网

Php 一种较短的语言检测算法

Php 一种较短的语言检测算法,php,url,Php,Url,我需要一种方法,包括一个php文件的基础上,在URL的语言。现在这个脚本正在运行,但是当我有10或20种语言时,我想要一些更短的脚本,它仍然包含相同的信息。问题是,如果URL中的“lg”更改为不存在的语言,我会使用英语 $langue=$_GET['lg']; if ($langue == "da") { include"da.php";} elseif ($langue == "de") { include"de.php";} elseif ($langue == "en") { includ

我需要一种方法,包括一个php文件的基础上,在URL的语言。现在这个脚本正在运行,但是当我有10或20种语言时,我想要一些更短的脚本,它仍然包含相同的信息。问题是,如果URL中的“lg”更改为不存在的语言,我会使用英语

$langue=$_GET['lg'];
if ($langue == "da")
{ include"da.php";}
elseif ($langue == "de")
{ include"de.php";}
elseif ($langue == "en")
{ include"en.php";}
elseif ($langue == "es")
{ include"es.php";}
else { include"en.php";}
有谁能缩短这个吗?

只需使用:

$lang = (file_exists($_GET['lg'] . '.php')) ? $_GET['lg'] . '.php' : 'en.php';
include($lang);
编辑:根据评论,我应该指出,尽管此代码功能强大且简洁,但确实极易受到恶意攻击,基本上任何人都可以将URL变量设置为配置或其他敏感文件,然后在您的网站上发起攻击,或窃取您的数据。因此,在调用include之前,请确保验证
$lang
变量-可能需要一个简单的:

$allowed = array('en.php', 'fr.php');
if(in_array($lang, $allowed)){
    include($lang);
}
只需使用:

$lang = (file_exists($_GET['lg'] . '.php')) ? $_GET['lg'] . '.php' : 'en.php';
include($lang);
编辑:根据评论,我应该指出,尽管此代码功能强大且简洁,但确实极易受到恶意攻击,基本上任何人都可以将URL变量设置为配置或其他敏感文件,然后在您的网站上发起攻击,或窃取您的数据。因此,在调用include之前,请确保验证
$lang
变量-可能需要一个简单的:

$allowed = array('en.php', 'fr.php');
if(in_array($lang, $allowed)){
    include($lang);
}


像这样的东西怎么样

if(isset($_REQUEST['lg']) && $_REQUEST['lg'] != '') $lg = $_REQUEST['lg'];

if(strstr($lg, '.')) die('Don\'t allow any . in the languages');

if(file_exists('path_to_language_files/'.$lg.'.php') {
    include('path_to_language_files/'.$lg.'.php');
} else {
    include('path_to_language_files/en.php');
}

像这样的怎么样

if(isset($_REQUEST['lg']) && $_REQUEST['lg'] != '') $lg = $_REQUEST['lg'];

if(strstr($lg, '.')) die('Don\'t allow any . in the languages');

if(file_exists('path_to_language_files/'.$lg.'.php') {
    include('path_to_language_files/'.$lg.'.php');
} else {
    include('path_to_language_files/en.php');
}

我有一个只使用两种语言的页面,但我需要将其打开以添加更多内容,因此,我解决了相同的问题,如下所示:

$allowed=array("da","de","en","es");
$default="de.php";
include(array_search($_GET["lg"],$allowed) === false ? $default : $allowed[array_search($_GET["lg"] , $allowed)].".php");

它的工作原理应该类似,只是您可以指定允许哪些文件,并且这些文件的名称取自数组,因此它应该不会受到虚假请求的影响。

我有一个只使用两种语言的页面,但我需要将其打开以添加更多文件,因此,我解决了如下相同的问题:

$allowed=array("da","de","en","es");
$default="de.php";
include(array_search($_GET["lg"],$allowed) === false ? $default : $allowed[array_search($_GET["lg"] , $allowed)].".php");


它的工作原理应该类似,只是您可以指定允许哪些文件,并且这些文件的名称取自阵列,因此它应该不会受到虚假请求的影响。

这是可行的,但它会执行一个stat来检查文件是否存在于磁盘上,这是一个不必要的开销。当它将是我的应用程序针对每个请求发出的唯一stat时,而不是现在的几百个,我开始考虑优化itOkay。。看来这实际上是最好的剧本。。。但我的问题是,因为有很多关于安全性的问题:我必须使用“允许”数组来组合这个脚本吗?你能告诉我“预赛”是为了什么吗?@Philip说得对,这是为了安全。它检查$lang是否只包含2个小写拉丁字母,否则发送“禁止访问”响应。所以,再也没有什么有害的东西了。因此,它实现了某种程度的自动化—您不需要使用添加的另一种语言更新数组。它还可以进行各种各样的错误检查,并允许优雅的回退——只要您的站点至少有en语言,它就会启动file@Philipregexp和语法都有错误。现在更正了这项功能,但是它会做一个统计来检查文件是否存在于磁盘上,这是一个不必要的开销。当它将是我的应用程序根据请求发出的唯一统计信息时,而不是像现在这样的数百个统计信息之一-我会开始考虑优化itOkay。。看来这实际上是最好的剧本。。。但我的问题是,因为有很多关于安全性的问题:我必须使用“允许”数组来组合这个脚本吗?你能告诉我“预赛”是为了什么吗?@Philip说得对,这是为了安全。它检查$lang是否只包含2个小写拉丁字母,否则发送“禁止访问”响应。所以,再也没有什么有害的东西了。因此,它实现了某种程度的自动化—您不需要使用添加的另一种语言更新数组。它还可以进行各种各样的错误检查,并允许优雅的回退——只要您的站点至少有en语言,它就会启动file@Philipregexp和语法都有错误。现在更正了当我使用脚本时,由于缺少“)”而出现了一些错误,“不允许任何…”命令由于单引号而被销毁。。但是当我读剧本的时候,它看起来很好,我只是有一个关于这个的问题。。如果(设置($\u请求['lg']&&&$\u请求['lg']!='')我如何将其更改为正确?它一直在告诉我有一个错误…很抱歉,我现在已经更新了代码,所以现在应该可以了,但您可能已经修复了:)当我使用脚本时,由于缺少“)”和“不允许任何…”命令被破坏,因为单引号。。但是当我读剧本的时候,它看起来很好,我只是有一个关于这个的问题。。如果(设置($\u请求['lg']&&&$\u请求['lg']!='')我如何将其更改为正确?它一直在告诉我有错误……抱歉,我已经更新了代码,所以现在应该可以了,但你可能已经修复了:)我不知道。。我什么也没做,只是把它标记为正确的..:/没关系,显然有些人就是受不了简洁的代码!对于明显的易受攻击性是的,代码是易受攻击的,部署时最好实际验证变量,但作为一个起点,它是有效的。去告诉OP,而不是我。我不知道。。我什么也没做,只是把它标记为正确的..:/没关系,显然有些人就是受不了简洁的代码!对于明显的易受攻击性是的,代码是易受攻击的,部署时最好实际验证变量,但作为一个起点,它可以工作。去告诉OP,不是我。你刚刚接受了使你的网站容易被黑客攻击的代码/你刚刚接受了使你的网站容易被黑客攻击的代码/你回答这个问题有点晚了尝试避免你的不安全代码,无论如何你升级了它,所以没问题。你回答这个问题有点晚了尝试避免你的不安全代码,不管怎样,你升级了它,这样就可以了。