php extract() 函式從陣列中把變數匯入到當前的符號表中。對於陣列中的每個元素,鍵名用於變數名,鍵值用於變數值。
下面是php的超級全域性變數,可以了解乙個特性,全是陣列。 gl
obal
s,所有
全域性變數
陣列g lo
bals
,所有全
局變數數
組_server, 伺服器環境變數陣列 ge
t,通過
get方
法傳遞給
指令碼的變
量陣列 get
,通過g
et方法
傳遞給腳
本的變數
陣列
_post, 通過post方法傳遞給指令碼的變數陣列 co
okie
,coo
kie變
量陣列 coo
kie,
cook
ie變數
陣列
_request,所有使用者輸入的變數陣列,包括ge
t,g et
,_post和co
okie
所包含的
輸入內容
c oo
kie所
包含的輸
入內
容_files,與檔案上傳相關得變數陣列 en
v,環境
變數陣列
e nv
,環境變
量數
組_session,會話變數陣列
可以通過本地測試一下 phpstudy
寫入 1.php
<?php
var_dump($_get);
?>
訪問 得到array(2)
extract(array,extract_rules,prefix)
<?php
$a = 'original';
$my_array = array("a" => "cat","b" => "dog", "c" => "horse");
extract($my_array);
echo
"\$a = $a; \$b = $b; \$c = $c";
?>
輸出: a=
cat;
a =c
at
;b = dog;
$c = horse
<?php
$a = 'original';
$my_array = array("a" => "cat","b" => "dog", "c" => "horse");
extract($my_array, extr_prefix_same, 'dup');
echo
"\$a = $a; \$b = $b; \$c = $c; \$dup_a = $dup_a;";
?>
輸出: a=
orig
inal
; a=o
rigi
nal;
b = dog; c=
hors
e;c =h
orse
;dup_a = cat;
字首和陣列鍵名之間會自動加上乙個下劃線。
extract(),它的主要作用是將陣列展開,鍵名作為變數名,元素值為變數值
可以說為陣列的操作提供了另外乙個方便的工具,比方說,可以很方便的提取po
st或者
p os
t或
者_get的元素,對表單提交上來的內容不能不用一一賦值,直接使用下面**:
form.html
1.php
<?php
@extract($_post,extr_skip);
echo
$ai?>
當輸入 jkl 輸出 為 jkl 可以看到 我們沒有用po
st去接
受變數 pos
t去接受
變數
a 把陣列中的鍵名直接註冊為了變數,就像把po
st[a
i]直接
註冊為了
p os
t[ai
]直接注
冊為
了ai
安全的做法是確定register_globals=off後,在呼叫extract()時使用extr_skip保證已有變數不會被覆蓋。
<?php
$auth='0';
extract($_get);
if($auth==1)
else
?>
當構造時,可列印出private! PHP 變數覆蓋 extract
這個函式 是因為看了下 phpcms 前台 getshell 發現這些函式果然乙個都不能漏。該函式官方文件 在此 多翻官方文件,好多人跟我說過這個習慣 原因 無非是 變數覆蓋,至於 能造成什麼危害 就看下邊 怎麼寫了。int extract array array int flags extr ov...
關於變數覆蓋
由於private變數受訪問許可權的限制,它不能被覆蓋。屬性的值取父類還是子類並不取決於我們建立物件的型別,而是取決於我們定義的變數的型別 既 等號前面的型別 friendly protected和public修飾符並不影響屬性的覆蓋。靜態變數和靜態常量屬於類,不屬於物件,因此它們不能被覆蓋。常量可...
變數覆蓋漏洞
變數覆蓋指的是可以用我們自定義的引數值替換程式原有的變數值 經常引發變數覆蓋漏洞的函式有 extract parse str 和import request variables 函式 一 使用函式不當 1.extract 函式 該函式有三種情況會覆蓋掉已有變數 第一種情況是第二個引數為extr ov...