这是一个PHP脚本。
<?php
eval(" echo 0?>');echo 1 ");
echo 2;
?>
输出为 0');echo 1 2
。
似乎 ?>
告诉eval
只打印字符串的其余部分。这是正确的行为,还是有人可以解释为什么会这样?
答案 0 :(得分:2)
?>
仅在eval-ed代码中关闭PHP代码,其余的被解释为HTML并且只是发送到浏览器。 eval()
期望PHP并且不需要开放<?php
,但?>
结束PHP。将eval()
视为虚拟机,它在具有eval()
的页面中独立于PHP执行代码。所以:
<?php // start executing PHP
// evaluate PHP independently, inside a function
// echo 0
eval(" echo 0
?> // end PHP execution
');echo 1 " // output as HTML
); // end the eval() function execution
echo 2; // since eval() is complete as a PHP function, continue PHP execution
?> // end PHP execution
答案 1 :(得分:1)
执行的语句是:
eval(" echo 0?>');echo 1 ");
echo 2;
第一个与运行此PHP代码非常相似:
<?php
echo 0
?>
'); echo 1
它清楚地打印0
后跟'); echo 1
。
然后执行第二个语句,打印2
。