- 1、這段PHP代碼啥意思
- 2、這段PHP代碼是什麼意思呢?
- 3、這段php代碼的意思?
是段數據庫查詢代碼,DB::fetch_all是DB類調用fetch_all方法,獲取符合條件的所有紀錄。DB::table就是DB類調用table方法獲取響應的表名,後面where語句就是where條件。簡單來說就是這樣的$inputs=DB::fetch_all(“select * from `表名` where 條件 order by input_id”);
?php
//判斷擴展 mysql 不存在 而 擴展 mysqli 存在的話
if(!function_exists(‘mysql_query’) AND function_exists(‘mysqli_query’))
{
//定義函數 mysql_query,使用 mysqli_query 作替代
function mysql_query($query, $link)
{
return mysqli_query($link, $query);
}
}
這段代碼的意思是,當 mysql 擴展不存在而且 mysqli 擴展存在 的時候, 仍然希望使用 mysql_query 這個函數來代替 mysqli_query 來保持代碼的兼容。
But:
現在來說的話,還是使用 PDO 來操作數據庫吧。
整個代碼是用來過濾惡意注入的。
if(isset($_REQUEST[‘GLOBALS’]) || isset($_FILES[‘GLOBALS’])) exit(‘Request Denied’);
這一行是發現有惡意的全局變量提交上來就攔截。
@set_magic_quotes_runtime(0);
$MQG = get_magic_quotes_gpc();
這裡是讀取系統環境變量
foreach(array(‘_POST’, ‘_GET’, ‘_COOKIE’) as $__R) {
這個是新建一個數組,三個值就在上面了。
if(isset($$__R)) {
foreach($$__R as $__k = $__v) {
if(isset($$__k) $$__k == $__v) unset($$__k);
}
估計難的就是這裡吧。。$__R 在第一次循環時,值是 _POST 前面再加一個 $ 即 $_POST
如果 $_POST 已經賦值,這個有點多餘,因為這是內置變量,一定存在的。
之後把 $$__R 分別看成 $_POST $_GET 啥的即可,拆分 $_POST 每個值到 $__V 里,索引存到 $__K 里。如果有 $_POST[‘a’] = ‘b’; 那 $__K 就是 a ,$__V 就是 b。下面是同樣的意思。
如果 $($__K) 即 $a 已經存在,並且這個變量的值和現在 POST 過來的值相同,就把原來的變量註銷掉。只保留 POST 過來的那個變量。
也就是說,如果代碼原來有 $a=’b’ 現在又提交了一個 $_POST[‘a’]=’b’; 現在就刪掉原來的 $a 保留 POST 的那個。這是用於別人已經成功注入的情況下,可以把他們已經注入的變量幹掉。
if(!$MQG)$$__R = daddslashes($$__R);
上面這個是檢查環境變量,魔法引號是否開啟,如果沒有開啟的話,過濾整個 $_POST(GET COOKIE)
$$__R = strip_sql($$__R);
$$__R = dsafe($$__R);
上面這兩個是自定義過濾,看樣子是過濾 SQL 注入啥的。原理同上。
}
}
原創文章,作者:FX6B0,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/126694.html