PHP: eval 与 <?php ?> 相同

标题说明了一切...

编辑:如果两者都基于 zend_eval_string

,则该问题也可用作查询

eval 的作用是否与

相同
<?php ?>

我一直想知道如何解释这一点。我试图查找它,但没有运气。当我在网上搜索时,我找不到任何可以准确解释其工作原理的文章。

再次使用标记,问题是:

  eval();

  <?php 

  ?>

?

xujing_521 回答:PHP: eval 与 <?php ?> 相同

eval 用于从 String 执行 PHP 代码。

如果您在谈论使用 <?php 标记,您已经编写了代码,但是使用 eval 您可以从变量或生成的动态代码执行代码。

最重要的是:您永远应该使用 eval 函数和用户输入!这是一个严重的安全问题。

例如以下代码:

<?php
function test() {
  echo "Hi";
}

test();
?>

将产生与以下相同的结果:

<?php
$script  = 'function test() {';
$script .= '  echo "Hi";';
$script .= '}';
$script .= 'test();';

eval($script);

或:

<?php
eval('
function test() {
  echo "Hi";
}

test();
');
,

是的。

但使用 eval() 会开启注入攻击:

<?php
eval('echo "'.$_GET['text'].'"; ');
?>

类似于SQL注入,用户可以输入

a"; unlink('index.php'); //

或者甚至邪恶的东西:

a"; system('rm -rf /'); //

删除 index.php。

否则,它是一样的。 不要使用eval(),除非您绝对确定用户无法完成语句!

如果要执行名称为 string 的函数或从将属性名称指定为 string 的对象加载属性,则无需 eval() 即可执行此操作:

<?php
class myClass {
    function __construct() {
        echo __CLASS__." is being created!\n";
    }
    function __destruct() {
        echo __CLASS__.' under destruction...';
    }
    public $a = 3;
    public function hello() {
        echo 'hello'."\n";
    }
}
function sayBye() {
    echo 'bye'."\n";
}

$string = 'sayBye';
$string(); // executes sayBye
$obj = new myClass();
$prop = 'b';
$obj->$prop(); // calls $obj->hello()
$prop = 'a';
echo $obj->$prop; // 3
本文链接:https://www.f2er.com/821.html

大家都在问