2015-11-07 93 views
0

这是一个PHP脚本。它为什么在PHP中起作用?

<?php 

eval(" echo 0?>');echo 1 "); 
echo 2; 

?> 

输出是0');echo 1 2。 而且看起来?>告诉eval只打印字符串的其余部分。这是正确的行为,还是有人可以解释为什么会发生?

+1

'?>'关闭PHP代码,其余部分被解释为HTML并刚刚发送到浏览器。 – AbraCadaver

+1

检查你的_quotes_ – aldrin27

+0

@AbraCadaver是的你是对的;问题在于echo 2被执行! – user2779060

回答

1

正在执行的语句是:

  1. eval(" echo 0?>');echo 1 ");
  2. echo 2;

第一个是非常相似,运行此PHP代码:

<?php 

echo 0 
?> 

'); echo 1 

而且它清楚地打印0后跟'); echo 1

然后执行第二条语句,即打印2

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 
+0

谢谢你。 “休息被解释为HTML” - 这是我想知道的。 – user2779060

+0

是的,当Web服务器获取页面时,看到“<?php”将它发送给PHP进行解析,并且eval确实排序相同。一旦遇到'>>',PHP就完成了,剩下的就是HTML。就像你的页面没有'<?php'一样。 – AbraCadaver

相关问题