相关疑难解决方法(0)

什么时候是PHP的eval邪恶?

在我用PHP开发的这些年里,我总是听说使用eval()是邪恶的.

考虑以下代码,使用第二个(更优雅)选项是否有意义?如果没有,为什么?

// $type is the result of an SQL statement
// e.g. SHOW COLUMNS FROM a_table LIKE 'a_column';
// hence you can be pretty sure about the consistency
// of your string
$type = "enum('a','b','c')";

// possibility one
$type_1 = preg_replace('#^enum\s*\(\s*\'|\'\s*\)\s*$#', '', $type);
$result = preg_split('#\'\s*,\s*\'#', $type_1);

// possibility two
eval('$result = '.preg_replace('#^enum#','array', $type).';');
Run Code Online (Sandbox Code Playgroud)

php eval

82
推荐指数
9
解决办法
4万
查看次数

什么时候(如果有的话)是eval而不是邪恶?

我听说很多 地方 PHP的eval功能往往不是答案.鉴于PHP 5.3的LSB闭包,我们已经没有理由依赖evalcreate_function.

是否有任何可以想象的案例,哪些eval是PHP 5.3中最好(唯一?)的答案?

这个问题不是关于eval一般是否是邪恶,因为它显然不是.

答案摘要:

  • 评估数值表达式(或PHP的其他"安全"子集)
  • 单元测试
  • 交互式PHP"shell"
  • 可信赖的反序列化 var_export
  • 一些模板语言
  • 为管理员和/或黑客创建后门
  • 与<PHP 5.3的兼容性
  • 检查语法(可能不安全)

php eval

26
推荐指数
4
解决办法
7218
查看次数

标签 统计

eval ×2

php ×2