这是一个PHP脚本。它为什么在PHP中起作用?
<?php
eval(" echo 0?>');echo 1 ");
echo 2;
?>
输出是0');echo 1 2
。 而且看起来?>
告诉eval
只打印字符串的其余部分。这是正确的行为,还是有人可以解释为什么会发生?
这是一个PHP脚本。它为什么在PHP中起作用?
<?php
eval(" echo 0?>');echo 1 ");
echo 2;
?>
输出是0');echo 1 2
。 而且看起来?>
告诉eval
只打印字符串的其余部分。这是正确的行为,还是有人可以解释为什么会发生?
正在执行的语句是:
eval(" echo 0?>');echo 1 ");
echo 2;
第一个是非常相似,运行此PHP代码:
<?php
echo 0
?>
'); echo 1
而且它清楚地打印0
后跟'); echo 1
。
然后执行第二条语句,即打印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
谢谢你。 “休息被解释为HTML” - 这是我想知道的。 – user2779060
是的,当Web服务器获取页面时,看到“<?php”将它发送给PHP进行解析,并且eval确实排序相同。一旦遇到'>>',PHP就完成了,剩下的就是HTML。就像你的页面没有'<?php'一样。 – AbraCadaver
'?>'关闭PHP代码,其余部分被解释为HTML并刚刚发送到浏览器。 – AbraCadaver
检查你的_quotes_ – aldrin27
@AbraCadaver是的你是对的;问题在于echo 2被执行! – user2779060