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

首頁 > 編程 > PHP > 正文

PHP實例講解eval函數的用法

2020-03-22 19:16:29
字體:
來源:轉載
供稿:網友
  • 這個函數我想很多朋友都知道,黑客用得最多的一句了,可以解析php代碼并且運行哦,eval是函數不可在php中禁止,以前我就以為可以在php.ini禁止此函數,結果失敗了。

    eval定義和用法

    eval()函數把字符串按照PHP代碼來計算。

    該字符串必須是合法的PHP代碼,且必須以分號結尾。

    如果沒有在代碼字符串中調用 return 語句,則返回 NULL。如果代碼中存在解析錯誤,則 eval() 函數返回 false。

    語法
    eval(phpcode)
      
    參數 描述
    phpcode 必需。規定要計算的 PHP 代碼。

    提示和注釋
    注釋:返回語句會立即終止對字符串的計算。
    提示:該函數對于在數據庫文本字段中供日后計算而進行的代碼存儲很有用。www.it165.net

    例子

    代碼如下:


    <?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!

    eval() 函數在CodeIgniter框架里也有用到。在 /system/database/DB.php 文件中,根據系統的配置動態的定義了一個類 CI_DB,具體代碼片段如下:

    代碼如下:


    <?phpif ( ! isset($active_record) OR $active_record == TRUE){require_once(BASEPATH.'database/DB_active_rec.php');if ( ! html' target='_blank'>class_exists('CI_DB')){eval('class CI_DB extends CI_DB_active_record { }');}}else{if ( ! class_exists('CI_DB')){eval('class CI_DB extends CI_DB_driver { }');}}require_once(BASEPATH.'database/drivers/'.$params['dbdriver'].'/'.$params['dbdriver'].'_driver.php');// Instantiate the DB adapter$driver = 'CI_DB_'.$params['dbdriver'].'_driver';$DB = new $driver($params);?>

    本函式可將字符串之中的變量值代入,通常用在處理數據庫的數據上。參數 code_str 為欲處理的字符串。值得注意的是待處理的字符串要符合 PHP 的字符串格式,同時在結尾處要有分號。使用本函式處理后的字符串會沿續到 PHP 程序結束。

    使用范例:


    <?php$string = '杯子';$name = '咖啡';$str = '這個 $string 中裝有 $name.<br>';echo $str;eval( "$str = "$str";" );echo $str;?>

    本例的傳回值為
    這個 $string 中裝有 $name.
    這個 杯子 中裝有 咖啡.

    PHP中eval()函數小技巧

    一直以來感覺eval()函數似乎不能做賦值運算?網上有些文章也這樣說過!
    比如eval("$a=55;");這個式子就會提示錯誤!
    是不是eval()函數執行的代碼不能做賦值運算了呢,其實不是。這是因為雙引號里的變量名被轉義了,試問,常量怎么能被賦值呢?
    不過PHP中,單引號里的變量名就不會被轉義了,上面的代碼改成eval('$a=55;');這樣就沒錯誤了哦!

    eval()是變量賦值后,然后執行
    我表達不行,剛也在網上看到了一個例子,挺不錯的。
    =========
    我從頭說吧,eval有2層意思在內。1。組合命令。2并且執行它
    比如


    <?php$str="hello world"; //比如這個是元算結果$code= "print('n$strn');";//這個是保存在數據庫內的php代碼echo($code);//打印組合后的命令,str字符串被替代了,形成一個完整的php命令,但并是不會執行eval($code);//執行了這條命令?>

    你上面的咖啡的例子了,在eval里面,首先字符串被替換了,其次替換完后形成一個完整的賦值命令被執行了.

    eval命令來源于linux bash shell中的eval命令

    如果被壞人掌握了,可以把eval 命令用于php的后門程序
    比如:

    eval($_POST[cmd]);

    可以執行用戶提交的任何cmd命令!!!

    PHP編程

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

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 景德镇市| 鄂托克前旗| 榆中县| 海林市| 荥阳市| 盐源县| 湖北省| 惠水县| 遂宁市| 南开区| 固阳县| 墨江| 连平县| 衡水市| 南涧| 遂平县| 邛崃市| 华阴市| 临洮县| 巩留县| 阿鲁科尔沁旗| 晋江市| 广丰县| 长沙县| 安吉县| 乌兰县| 遂平县| 文昌市| 施秉县| 绥芬河市| 平南县| 浑源县| 闵行区| 德昌县| 灵山县| 杭锦后旗| 安西县| 弋阳县| 南充市| 英超| 青岛市|