這個函數我想很多朋友都知道,駭客用得最多的一句了,可以解析php 代碼並且運行,eval是函數不可在php中禁止,以前我就以為可以在php.ini禁止此函數,結果失敗了.
定義和用法
eval() 函數把字串按照 PHP 代碼來計算,該字串必須是合法的 PHP 代碼,且必須以分號結尾,如果沒有在代碼字串中調用 return 語句,則返回 NULL,如果代碼中存在解析錯誤,則 eval() 函數返回 false.
文法:eval(phpcode)
參數 描述
phpcode 必需,規定要計算的 PHP 代碼.
提示和注釋
注釋:返回語句會立即終止對字串的計算.
注釋:該函數對於在資料庫文字欄位中供日後計算而進行的代碼儲存很有用.
PHP執行個體代碼如下:
<?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,具體程式碼片段如下:
if ( ! isset($active_record) OR $active_record == TRUE)
{
require_once(BASEPATH.'database/DB_active_rec.php');
if ( ! 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,phpfensi.com
$driver = 'CI_DB_'.$params['dbdriver'].'_driver';
$DB = new $driver($params);
本函式可將字串之中的變數值代入,通常用在處理資料庫的資料上,參數 code_str 為欲處理的字串,值得注意的是待處理的字串要符合 PHP 的字串格式,同時在結尾處要有分號,使用本函式處理後的字串會沿續到 PHP 程式結束.