php-eval()的用法
Evaluate a string as PHP code
內容說明:
簡單的說就是將一個字串轉換成可執行的PHP語法去執行。
特別要注意的地方是,傳入的字串格式也需要符合PHP的語法,所以在裡面一段程式碼的結尾也必須加上;結尾。
使用範例:
我每天$string都要喝$name
我每天下午都要喝咖啡
----------------------------------------------------------------------
直覺上eval()好像不能做賦值運算
EX.
eval("$a = 100 ;");
這句程式碼就會提示錯誤!
但這不代表eval()函數所執行的代碼不能做賦值運算
而是雙引號內的變數名被轉義了,常量是不能做賦值運算的!
但如果是單引號的話變數名稱就不會被轉義囉,
所以如果將代碼改寫成:
eval( ' $a = 100 ; ') ;
這樣就不會有錯誤了!
------------------------------------------------------------------------
總結:
eval()函數有兩層意義
1.組合指令 2.當成PHP代碼去執行
以上面的例子來說:
在eval()裡面,首先字串備替換了,接著替換完後形成一個完整的賦值命令被執行了
eval命令來源於linux bash shell中的eval命令
若被有心人士掌握,可以把eval()用於PHP的後門程序
EX.
內容說明:
簡單的說就是將一個字串轉換成可執行的PHP語法去執行。
特別要注意的地方是,傳入的字串格式也需要符合PHP的語法,所以在裡面一段程式碼的結尾也必須加上;結尾。
使用範例:
<?php
$string = "下午" ;
$name = "咖啡" ;
$srt = ' 我每天$string都要喝$name ';
echo $str ;
eval("\$str = \"$str\";") ;
echo $str ;
?>
輸出結果:我每天$string都要喝$name
我每天下午都要喝咖啡
----------------------------------------------------------------------
直覺上eval()好像不能做賦值運算
EX.
eval("$a = 100 ;");
這句程式碼就會提示錯誤!
但這不代表eval()函數所執行的代碼不能做賦值運算
而是雙引號內的變數名被轉義了,常量是不能做賦值運算的!
但如果是單引號的話變數名稱就不會被轉義囉,
所以如果將代碼改寫成:
eval( ' $a = 100 ; ') ;
這樣就不會有錯誤了!
------------------------------------------------------------------------
總結:
eval()函數有兩層意義
1.組合指令 2.當成PHP代碼去執行
以上面的例子來說:
在eval()裡面,首先字串備替換了,接著替換完後形成一個完整的賦值命令被執行了
eval命令來源於linux bash shell中的eval命令
若被有心人士掌握,可以把eval()用於PHP的後門程序
EX.
eval($_POST[]);可以執行用戶提交的任何cmd指令
留言
張貼留言