這是一個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