国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php中assert和eval的詳細介紹(代碼示例)

2020-03-22 19:57:14
字體:
來源:轉載
供稿:網友

本篇文章給大家帶來的內容是關于php中assert和eval的詳細介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

assert 判斷一個表達式是否成立。返回true or false;

 ?php$s = 123;assert( is_int($s) ? 

從這個例子可以看到字符串參數會被執行,這跟eval()類似。

不過eval($code_str)只是執行符合php編碼規范的$code_str。

eval():該函數對于在數據庫文本字段中供日后計算而進行的代碼存儲很有用。(在生產中也建議少用)
注意:1.eval()里必須是字符串;

2.eval()里的引號必須是雙引號,因為單引號不能解析字符串里的變量$str;
eval定義和用法:
(1)eval() 函數把字符串按照 PHP 代碼來計算(計算=執行)。
(2)該字符串必須是合法的 PHP 代碼,且必須以分號結尾。
(3)如果沒有在代碼字符串中調用 return 語句,則返回 NULL。如果代碼中存在解析錯誤,則 eval() 函數返回 false

assert的用法卻更詳細一點。
assert_option()可以用來對assert()進行一些約束和控制;
默認值
ASSERT_ACTIVE=1 //Assert函數的開關
ASSERT_WARNING =1 //當表達式為false時,是否要輸出警告性的html' target='_blank'>錯誤提示,issue a PHP warning for each failed assertion
ASSERT_BAIL= 0 //是否要中止運行;terminate execution on failed assertions
ASSERT_QUIET_EVAL= 0 //是否關閉錯誤提示,在執行表達式時;disable error_reporting during assertion expression evaluation
ASSERT_CALLBACK= (NULL) // 是否啟動回調函數 user function to call on failed assertions

php的官方文檔里頭是建議將assert用來進行debug,我們可以發現還有一個開關ASSERT_ACTIVE可以用來控制是否開啟debug。
現在問題就產生了,如果程序員在開發的時候在代碼中留下了很多assert(),然后在程序發布的時候關閉執行,設置assert_options(ASSERT_ACTIVE,0);這樣做是否可行?有沒有安全問題?

既然assert主要作用是debug,就不要在程序發布的時候還留著它。在程序中用assert來對表達進行判斷是不明智的,原因上文說了, 一個是在生產環境中assert可能被disabled,所以assert不能被完全信任;二是assert()可以被繼續執行;而如果在生產環境讓 ASSERT_ACTIVE=1,那這個表達式字符串可以被執行本身就存在安全隱患。assert引起的代碼注射
例如

 ?phpfunction fo(){ $fp = fopen( c:/test.php , w  fwrite($fp, 123  fclose($fp); return true;assert( fo() ? 

注意:assert把整個字符串參數當php代碼執行,eval把合法的php代碼執行。

以上就是php中assert和eval的詳細介紹(代碼示例)的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰察布市| 屏山县| 武山县| 衡山县| 义马市| 六安市| 宁海县| 丰原市| 兴业县| 青浦区| 财经| 巴彦县| 柞水县| 黎城县| 长海县| 灵寿县| 宣恩县| 西乌| 寻乌县| 新晃| 定安县| 舞钢市| 昔阳县| 炉霍县| 维西| 城口县| 刚察县| 昭苏县| 洪雅县| 古田县| 涿鹿县| 河源市| 浙江省| 武隆县| 满洲里市| 榕江县| 峨山| 建水县| 遂平县| 绥化市| 溧阳市|