2015-11-07 72 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

相關問題