eval函數php
① php eval函數的問題,$str是計算公式,請問如何才能計算出結果
對樣寫eval('$end='.$str.';');eval裡面只要符合php語法行
寫時注意引號問題
終化成
eval('$end=$param1*$money1/10000;');和者eval('$end=2*40000/10000;');
② 求PHP中eval()函數的使用方法
eval() 函數把字元串按照 PHP 代碼來計算。
該字元串必須是合法的 PHP 代碼,且必須以分號結尾。
如果沒有在代碼字元串中調用 return 語句,則返回 NULL。如果代碼中存在解析錯誤,則 eval() 函數返回 false。
例子:
<?php
$string = "beautiful";
$time = "winter";
$str = 'This is a $string $time morning!';
echo $str. "<br />";
eval("\$str = \"$str\";");
echo $str;
?>
輸出:
This is a $string $time morning!
This is a beautiful winter morning!
③ php中eval和assert的區別
assert():
assert這個函數在php語言中是用來判斷一個表達式是否成立。返回true or false;
例如
<?php
$s =123;
assert("is_int($s)");
?>
從這個例子可以看到字元串參數會被執行,這跟eval()類似。不過eval($code_str)只是執行符合php編碼規范的$code_str。assert的用法卻更詳細一點。
assert_option()可以用來對assert()進行一些約束和控制;
如果按照默認值來,在程序的運行過程中調用assert()來進行判斷表達式,遇到false時程序也是會繼續執行的,這在生產環境中這樣使用是不好的,而 在開發調試環境中,卻是一種debug的不錯的方式。特別是用上callback的方法,可以知道具體的出錯信息。
所以,php的官方文檔里頭是建議將assert用來進行debug,我們可以發現還有一個開關ASSERT_ACTIVE可以用來控制是否開啟debug。
現在問題就產生了,如果程序員在開發的時候在代碼中留下了很多assert(),然後在程序發布的時候關閉執行,設置assert_options(ASSERT_ACTIVE,0);這樣做是否可行?有沒有安全問題?
我的建議是,既然assert主要作用是debug,就不要在程序發布的時候還留著它。在程序中用assert來對表達進行判斷是不明智的,原因上文說了, 一個是在生產環境中assert可能被disabled,所以assert不能被完全信任;二是assert()可以被繼續執行;而如果在生產環境讓ASSERT_ACTIVE=1,那這個表達式字元串可以被執行本身就存在安全隱患。
eval():該函數對於在資料庫文本欄位中供日後計算而進行的代碼存儲很有用。
注意:1.eval()里必須是字元串;2.eval()里的引號必須是雙引號,因為單引號不能解析字元串里的變數$str;
定義和用法:
(1)eval() 函數把字元串按照 PHP 代碼來計算(計算=執行)。
(2)該字元串必須是合法的 PHP 代碼,且必須以分號結尾。
(3)如果沒有在代碼字元串中調用 return 語句,則返回 NULL。如果代碼中存在解析錯誤,則 eval() 函數返回 false。
④ PHP用eval時候如果eval的參數有語法錯誤 我想反回個FALSE 怎麼去判斷。
手冊上的,定義和用法
eval() 函數把字元串按照 PHP 代碼來計算。
該字元串必須是合法的 PHP 代碼,且必須以分號結尾。
如果沒有在代碼字元串中調用 return 語句,則返回 NULL。如果代碼中存在解析錯誤,則 eval() 函數返回 false。
判斷的時候就
if(eval(字元串)) {
} else {
false
}
⑤ php執行eval&40;phpinfo時,會返回什麼信息
關於eval 的概念就是把字元串作為PHP代碼執行。但是關於其返回值,有時候容易出錯。
如下面定義一個函數
function get_func_type(){
return array(1=>'字元串處理','2'=>'數組處理');}
你能正確說出例1,例2,例3的執行結果嗎?
例1
$p=eval('get_func_type();');
trace($p);
例2
$p=eval('return get_func_type();');
trace($p);
例3
eval('$p=get_func_type();');
trace($p);
例1返回null,
例2返回如下
Array
(
[1] => 字元串處理
[2] => 數組處理
)
例3返回如下
「`
Array
(
[1] => 字元串處理
[2] => 數組處理
)
關於eval函數的返回值,手冊上是如下定義的
這里寫圖片描述
這句話可能說的不是很清楚。簡單點就是如果,執行語句中有return,且return不在函數裡面,則返回Return後面的值,否則返回null。
⑥ eval()的PHP
Eval函數在PHP代碼中的使用:eval() 函數把字元串按照 PHP 代碼來計算。該字元串必須是合法的 PHP 代碼,且必須以分號結尾。如果沒有在代碼字元串中調用 return 語句,則返回 NULL。如果代碼中存在解析錯誤,則 eval() 函數返回 false。實例如圖所示。
實例:
$string = "beautifual";
$time = "winter";
$str =' This is a $string $time morning!'
echo $str. "<br />";
eval("$str = "$str";");
echo $str;
⑦ 問一個PHP中關於EVAL的用法
<?PHP
$b='abcdefg';
$a='b';
echo $a."<BR>"; //輸出$a內容b
echo $$a."<BR>"; //輸出$b內容abcdefg
?>
$$方法也可應用到數組
以下操作可能更符合你現在情況
<?PHP
$b='safasfa';
$a='$b';
eval("echo $a;");
?>
⑧ php eval怎樣執行系統命令
eval — 把字元串作為PHP代碼執行
說明
mixedeval( string $code_str )
把字元串code_str作為PHP代碼執行。 除了其他,該函數能夠執行儲存於資料庫文本欄位內的PHP代碼。
使用eval()時需注意幾個因素:注意字元必須是有效的PHP代碼,包括結尾的分號,以不至於解釋器在eval()之後退出。並且正確地轉義code_str中的東西。你可以使用一個PHP閉合標簽來混合輸出HTML和PHP代碼。
同時需注意eval中的變數會被保留在之後的主腳本中。
參數
code_str需要被執行的字元串code_str不能包含 PHP Opening tags。
return語句會立即中止當前字元串的執行。
返回值
eval()返回NULL,除非在執行的代碼中return了一個值,函數返回該值。 如果在執行的代碼中有一個解析錯誤,eval()返回FALSE,之後的代碼將正常執行。無法使用 set_error_handler() 捕獲eval()中的解析錯誤。
範例
Example #1eval()例子 - 簡單的文本合並
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
以上常式會輸出:
This is a $string with my $name in it.This is a cup with my coffee in it.
Note: 因為是一個語言構造器而不是一個函數,不能被 可變函數 調用。
Tip和直接將結果輸出到瀏覽器一樣,可使用輸出控制函數來捕獲當前函數的輸出,然後(例如)保存到一個 string 中。
Note:
如果在執行的代碼中產生了一個致命的錯誤(fatal error),整個腳本會退出。
Linux 中
shell中的eval命令將會首先掃描命令行進行所有的替換,然後再執行命令。該命令使用於那些一次掃描無法實現其功能的變數。該命令對變數進行兩次掃描。這些需要進行兩次掃描的變數有時候被稱為復雜變數。
例如
$:cat ext
count=3
cmd=echo
cmd="$cmd \$$count"
ext 11 22 33
此時cmd=" echo $3"
eval $cmd 等價於 "echo 33 "