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

首頁(yè) > 開(kāi)發(fā) > PHP > 正文

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

2024-05-04 21:50:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于php中assert和eval的詳細(xì)介紹(代碼示例),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

assert 判斷一個(gè)表達(dá)式是否成立。返回true or false;

  1. <?php 
  2.  
  3. $s = 123; 
  4.  
  5. assert("is_int($s)"); 
  6.  
  7. ?> 

從這個(gè)例子可以看到字符串參數(shù)會(huì)被執(zhí)行,這跟eval()類似。

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

eval():該函數(shù)對(duì)于在數(shù)據(jù)庫(kù)文本字段中供日后計(jì)算而進(jìn)行的代碼存儲(chǔ)很有用。(在生產(chǎn)中也建議少用)

注意:1.eval()里必須是字符串;

2.eval()里的引號(hào)必須是雙引號(hào),因?yàn)閱我?hào)不能解析字符串里的變量$str;

eval定義和用法:

(1)eval() 函數(shù)把字符串按照 PHP 代碼來(lái)計(jì)算(計(jì)算=執(zhí)行)。

(2)該字符串必須是合法的 PHP 代碼,且必須以分號(hào)結(jié)尾。

(3)如果沒(méi)有在代碼字符串中調(diào)用 return 語(yǔ)句,則返回 NULL。如果代碼中存在解析錯(cuò)誤,則 eval() 函數(shù)返回 false

assert的用法卻更詳細(xì)一點(diǎn)。

assert_option()可以用來(lái)對(duì)assert()進(jìn)行一些約束和控制;

默認(rèn)值

ASSERT_ACTIVE=1 //Assert函數(shù)的開(kāi)關(guān)

ASSERT_WARNING =1 //當(dāng)表達(dá)式為false時(shí),是否要輸出警告性的錯(cuò)誤提示,issue a PHP warning for each failed assertion

ASSERT_BAIL= 0 //是否要中止運(yùn)行;terminate execution on failed assertions

ASSERT_QUIET_EVAL= 0 //是否關(guān)閉錯(cuò)誤提示,在執(zhí)行表達(dá)式時(shí);disable error_reporting during assertion expression evaluation

ASSERT_CALLBACK= (NULL) // 是否啟動(dòng)回調(diào)函數(shù) user function to call on failed assertions

php的官方文檔里頭是建議將assert用來(lái)進(jìn)行debug,我們可以發(fā)現(xiàn)還有一個(gè)開(kāi)關(guān)ASSERT_ACTIVE可以用來(lái)控制是否開(kāi)啟debug。

現(xiàn)在問(wèn)題就產(chǎn)生了,如果程序員在開(kāi)發(fā)的時(shí)候在代碼中留下了很多assert(),然后在程序發(fā)布的時(shí)候關(guān)閉執(zhí)行,設(shè)置assert_options(ASSERT_ACTIVE,0);這樣做是否可行?有沒(méi)有安全問(wèn)題?

既然assert主要作用是debug,就不要在程序發(fā)布的時(shí)候還留著它。在程序中用assert來(lái)對(duì)表達(dá)進(jìn)行判斷是不明智的,原因上文說(shuō)了, 一個(gè)是在生產(chǎn)環(huán)境中assert可能被disabled,所以assert不能被完全信任;二是assert()可以被繼續(xù)執(zhí)行;而如果在生產(chǎn)環(huán)境讓 ASSERT_ACTIVE=1,那這個(gè)表達(dá)式字符串可以被執(zhí)行本身就存在安全隱患。assert引起的代碼注射

例如:

  1. <?php 
  2.  
  3. function fo(){ 
  4.  
  5.   $fp = fopen("c:/test.php",'w'); 
  6.  
  7.   fwrite($fp,"123"); 
  8.  
  9.   fclose($fp); 
  10. //Vevb.com 
  11.   return true; 
  12.  
  13.  
  14. assert("fo()"); 
  15.  
  16. ?> 

注意:assert把整個(gè)字符串參數(shù)當(dāng)php代碼執(zhí)行,eval把合法的php代碼執(zhí)行。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 长宁县| 武川县| 城口县| 黄石市| 团风县| 武安市| 贡觉县| 蒙山县| 包头市| 称多县| 扬中市| 京山县| 朝阳县| 偏关县| 莱阳市| 罗甸县| 库尔勒市| 密云县| 浦东新区| 通化县| 乌拉特前旗| 绥江县| 普陀区| 左权县| 青川县| 怀安县| 通许县| 九龙坡区| 扬州市| 天全县| 英超| 赣州市| 凤城市| 德格县| 炉霍县| 眉山市| 新巴尔虎左旗| 获嘉县| 林周县| 古交市| 遂昌县|