我在php中使用eval()函数时遇到了麻烦?

时间:2014-03-08 05:10:28

标签: php

我在google上搜索了这个功能很多。但是,我无法清楚地理解这个功能。 我有一个例子:

<?php
//eval dangerous to use
$motto="lksdfasdkf";
$str= "<h1>Welcome</h1><?php echo $motto;?><br/>"; 
echo $str.'<br />';  //result: welcome
eval("?>"." $str"."<?php echo $motto;");  //error
echo $str;
?>

2 个答案:

答案 0 :(得分:1)

eval()接受一个字符串并将其评估为PHP代码。以下是一些需要注意的要点:

  1. eval() PHP代码作为其参数 - 不是混合HTML标记。目前,您正在传递包含HTML标记的字符串。

  2. 您无需在字符串中添加<?php ... ?>标记。 eval()已经知道参数将是PHP代码(它应该是),所以你不需要告诉它

  3. 这是一个非常简短的例子:

    $motto = "lksdfasdkf";    
    $str = 'echo $motto;';     
    eval($str); // => lksdfasdkf
    

    此处,字符串$str包含文字字符串echo $motto;,它是PHP中的有效语句。当您调用eval($str);时,字符串将被评估为PHP代码。在这种情况下,它将回显变量的内容。

    请注意,如果您使用双引号,则无效:

    $motto = "lksdfasdkf";
    $str = "echo $motto;"; 
    eval($str);
    

    如果您启用了错误报告,则会收到以下错误:

      

    注意:使用未定义的常量lksdfasdkf - 假设'lksdfasdkf'在

    原因是当变量用单引号括起来时,变量解析。当您使用双引号来定义变量时,变量值会被内插到结果字符串中,这意味着$str将包含文字字符串echo lksdfasdkf; - 这是无效的PHP代码。解决方案是逃避美元字符以避免将其解释为变量:

    $motto = "lksdfasdkf";
    $str = "echo \$motto;"; 
    eval($str); // => lksdfasdkf
    

答案 1 :(得分:0)

eval - 将字符串评估为PHP代码 - 您的代码也正常工作

$motto="lksdfasdkf";
    $str= "<h1>Welcome</h1>$motto<br/>"; 
    echo $str.'<br />';  //result: welcome
    eval("\$str = \"$motto\";");
    echo $str;