当前位置:  开发笔记 > 编程语言 > 正文

php eval功能和性能

如何解决《phpeval功能和性能》经验,为你挑选了1个好方法。

我正在创建一个Web应用程序,我希望将所有对用户的响应存储在语言文件中以便于编辑.所以我使用eval()管理动态消息,这样:

$msg = 'Hello $user, your favorite color is $color';

$colors =  array("red","green","blue","yellow");
$users =  array("bob","craig","ted","dirty sanchez");

foreach($users as $key => $user){

 $color = $colors[$key];
 eval("\$newmsg = \"$msg\";");
 echo $newmsg;


}

我想知道这是最好的方法还是有更好的方法?



1> Lekensteyn..:

如果没有必要,切勿使用该死的eval!你的代码不起作用,你应该使用sprintf.

$messageFormat = 'Hello %s, your favorite color is %s';

$colors =  array("red","green","blue","yellow");
$users =  array("bob","craig","ted","dirty sanchez");
foreach($users as $key => $user){
   $color = $colors[$key];
   $actualMessage = sprintf($messageFormat, $user, $color);
   echo htmlentities($actualMessage);
}

假设您将此用于评论或其他用户提供的文本,我已添加htmlentities()以防止XSS.


@websiteguru:如果你可以避免(并且几乎总能避免),你应该不使用eval有两个原因:a)这是一个安全风险.eval允许执行PHP.如果用户可以将恶意输入走私到eval中,他就可以执行PHP(因此,他几乎可以完全控制你的服务器.)b)eval很慢,非常慢.并且eval代码很难理解.即使我称自己是PHP开发人员的经验,它仍然需要一些时间,直到我得到你的代码所做的,而Lekensteyn的代码非常清楚.
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有