我有3个变量和一个可信用户需要能够通过CMS定义的公式。该公式将随时间而变化,变量的值来自数据库。
我如何计算出计算的答案?我认为eval是相关的但不能完全发挥作用
$width = 10;
$height = 10;
$depth = 10;
$volumetric = '(W*H*D)/6000';
$volumetric = str_replace('W', $width, $volumetric);
$volumetric = str_replace('H', $height, $volumetric);
$volumetric = str_replace('D', $depth, $volumetric);
eval($volumetric);
这给了我:
Parse error: parse error in /path/to/vol.php(13) : eval()'d code on line 1
答案 0 :(得分:1)
您需要非常小心eval
,因为您可以让人们直接在服务器上运行命令。务必read the documentation彻底了解风险。
也就是说,您需要将结果分配给变量。你可以整理你正在做的事情,你只需要一个str_replace
。试试这个:
$width = 10;
$height = 10;
$depth = 10;
$volumetric = '(W*H*D)/6000';
$volumetric = str_replace(['W', 'H', 'D'], [$width, $height, $depth], $volumetric);
eval("\$result = $volumetric;");
echo $result;
答案 1 :(得分:0)
Eval是正确的方法...我的正确代码是:
$width = 60;
$height = 60;
$depth = 60;
$volumetric = '(W*H*D)/6000';
$volumetric = str_replace('W', $width, $volumetric);
$volumetric = str_replace('H', $height, $volumetric);
$volumetric = str_replace('D', $depth, $volumetric);
eval('$result = '.$volumetric.';');
echo $result;
答案 2 :(得分:0)
你的出发点是对的。如果您不想使用或编写复杂的解析器,则eval是最佳选择。但是,eval将给定的字符串转换为PHP代码。所以,基本上你正在努力的是这样;
$width = 10;
$height = 10;
$depth = 10;
$volumetric = '(W*H*D)/6000';
$volumetric = str_replace('W', $width, $volumetric);
$volumetric = str_replace('H', $height, $volumetric);
$volumetric = str_replace('D', $depth, $volumetric);
(10*10*10)/600;
所以输出错误。您应该将此等式赋值给变量。正确的方法是;
eval('$result = ('.$volumetric.');');
或
eval("\$result = ({$volumetric});")
另外我想添加一些东西。使用eval时小心!。