php全局?jǐn)?shù)組有9個:1、“$GLOBALS”,是由所有已定義的全局變量組成的數(shù)組;2、“$_SERVER”,是包含諸如頭信息、路徑和腳本位置的數(shù)組;3、“$_COOKIE”,由會話數(shù)據(jù)組成的數(shù)組;4、“$_GET”;5、“$_ENV”等。
本教程操作環(huán)境:windows7系統(tǒng)、PHP7.1版、DELL G3電腦
php全局?jǐn)?shù)組
php全局?jǐn)?shù)組全稱“超全局?jǐn)?shù)組”或“超全局變量”,是PHP中特殊定義的數(shù)組變量,之所以稱為超全局?jǐn)?shù)組是因為這些數(shù)組在腳本中的任何地方、任何作用域內(nèi)都可以訪問,如函數(shù)、類、文件等。
超全局?jǐn)?shù)組變量是在全部作用域中始終可用的內(nèi)置變量。
PHP中的超全局?jǐn)?shù)組包括以下9個:
-
$GLOBALS:包含一個引用指向每個當(dāng)前腳本的全局變量范圍內(nèi)有效的變量。該數(shù)組的鍵名為全局變量的名稱。
-
$_SERVER:顯示或獲取服務(wù)器的相關(guān)信息;
-
$_GET:把數(shù)據(jù)通過地址欄傳遞到服務(wù)器,這是方式必須是$_GET方式傳遞;
-
$_POST:通過表單發(fā)送的數(shù)據(jù)必須是POST方式;
-
$_REQUEST:包含上面兩種數(shù)據(jù)傳遞方式(POST和GET);
-
$_COOKIE:處理客戶端的會話數(shù)據(jù);
-
$_SESSION:處理服務(wù)器端的會話數(shù)據(jù);
-
$_FILES:上傳文件需要用到的數(shù)組;
-
$_ENV: 執(zhí)行環(huán)境提交至腳本的變量
$_GET
- 原理
- 使用一:瀏覽器通過超鏈接傳送信息給服務(wù)器(默認(rèn)是GET)
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> //注意:信息如何傳遞?。?! <a href="1.php?city=XI'AN&name=tan">數(shù)據(jù)</a> </body> </html>
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <?php echo "<pre>"; echo print_r($_GET); echo "</pre>"; echo $_GET['name']; ?> </body> </html>
- 注意:IE5.5和IE6存在中文奇數(shù)亂碼的問題,解決?urlencode和urldecode。
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <?php $city=urlencode("大西安"); echo "<a href='1.php?city={$city}&name=tan'>數(shù)據(jù)</a>"; ?> </body> </html>
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <?php echo "<pre>"; echo print_r($_GET); echo "</pre>"; echo urldecode($_GET['city']); ?> </body> </html>
- 使用二:瀏覽器通過表單傳送信息給服務(wù)器(最好使用$_POST)
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <form action='1.php' method='GET'> 輸入內(nèi)容:<input type='text' name='ha'/> <input type='submit' name='查詢'/> </form> </body> </html>
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <?php echo $_GET['ha']; ?> </body> </html>
- 禁止啟用register_globals:設(shè)置register_globals=off;
- 啟用register_globals,以下代碼訪問時若輸入http://localhost:88/1.php?a=10&b=20;將得到10 20。
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <?php echo $a." ".$b; ?> </body> </html>
$_POST
- 通過post方式提交的數(shù)據(jù),會被封裝到$_POST超全局?jǐn)?shù)組中。
- 使用一:瀏覽器通過表單傳送信息給服務(wù)器(有些數(shù)據(jù)必須使用post方式)
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <form action='1.php' method='POST'> 用戶名:<input type="text" name="username"/><br/> 密碼:<input type="password" name="password"/><br/> 性別:<input type="radio" name="sex" value="woman">女</input><input type="radio" name="sex" value="man">男</input><br/> 籍貫:<select name="city"> <option value="西安">西安</option> <option value="北京">北京</option> <option value="哈爾濱">哈爾濱</option> </select> <br/> 愛好:<input type="checkbox" name="hobby[]" value="唱歌">唱歌</input> <input type="checkbox" name="hobby[]" value="跳舞">跳舞</input> <input type="checkbox" name="hobby[]" value="LOL">LOL</input><br/> 個人簡介:<textarea rows="10" cols="10" name="introduce"></textarea><br> 文件上傳:<input type="file" name="files"></input><br/> <input type="submit" value="提交"/> </form> </body> </html>
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <?php echo "<pre>"; //如何接收checkbox的所有數(shù)據(jù)(注意中括號[]):<input type="checkbox" name="hobby[]" value="唱歌">唱歌</input> echo print_r($_POST); echo "</pre>"; $hobbies=$_POST['hobby']; foreach($hobbies as $key=>$val){ echo "<br/>".$key." ".$val; } ?> </body> </html>
-
POST方式和GET方式的區(qū)別
- POST方式安全性好
- 數(shù)據(jù)傳輸大?。≒OST方式大)
- 保存到收藏夾(GET方式)
$_REQUEST
$_REQUEST是一個包含了 $_POST、$_GET 和 $_COOKIE 的數(shù)組,數(shù)組結(jié)構(gòu)與 $_POST 和 $_GET 類似。
也就是說不管是使用 POST 還是使用 GET 方式提交的數(shù)據(jù),都可以使用 $_REQUEST 來獲取,甚至可以使用 $_REQUEST 來獲取 COOKIE 的信息。在 PHP5.3 中引入 request_order 屬性,我們可以通過在 php.ini 配置文件中修改 request_order 屬性的值,來控制 $_REQUEST 中包含的內(nèi)容。
request_order 屬性的值可以是 G、P 和 C 這三個大寫的英文字母,它們分別代表 GET、POST 和 COOKIE。默認(rèn)情況下 request_order 屬性的默認(rèn)值為request_order="GP",并不包含 C,也就是說 $_REQUEST 中并不包含 COOKIE 的信息,如果我們希望 $_REQUEST 中包含 COOKIE 的話,需要將其修改為request_order="GPC"。
注意:不要經(jīng)常使用$_REQUEST(因為將多個信息混合)。
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <a href="1.php?name='tan'">超鏈接</a> <form action='1.php' method='POST'> 用戶名:<input type="text" name="username"/><br/> 密碼:<input type="password" name="password"/><br/> <input type="submit" value="提交"/> </form> </body> </html>
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <?php echo $_REQUEST['name']; echo $_REQUEST['username']; ?> </body> </html>
- 通過$_SERVER[‘REQUEST_METHOD’]區(qū)分GET和POST
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <?php if($_SERVER['REQUEST_METHOD']=="GET"){ echo $_REQUEST['name']; }else if($_SERVER['REQUEST_METHOD']=="POST"){ echo $_REQUEST['username']; } ?> </body> </html>
$_SERVER
$_SERVER是一個包含諸如頭信息、路徑和腳本位置的數(shù)組。數(shù)組的實體由web服務(wù)器創(chuàng)建,并不能保證所有的服務(wù)器都能產(chǎn)生所有的信息,服務(wù)器可能忽略了一些信息,或者產(chǎn)生了一些其他的新的信息。和其他的超全局?jǐn)?shù)組一樣,這是一個自動的全局變量,在所有的腳本中都有效,在函數(shù)或?qū)ο蟮姆椒ㄖ胁恍枰褂胓lobal關(guān)鍵字訪問它。
$_ENV
獲取服務(wù)器端的環(huán)境變量,通過修改php.ini的variables_order="EGPCS"啟動。
$_ENV數(shù)組中的內(nèi)容是在PHP解析器運行時,從PHP所在服務(wù)器中的環(huán)境變量轉(zhuǎn)變?yōu)镻HP全局變量的。它們中許多都是由PHP所運行的系統(tǒng)決定的,完整的列表是不可能的,需要查看PHP所在服務(wù)器的系統(tǒng)文檔以確定其特定的環(huán)境變量。
$GLOBALS
$GLOBALS是由所有已定義的全局變量組成的數(shù)組,變量名就是該數(shù)組的索引。
-
包含了全部變量的全局組合數(shù)組。
- 當(dāng)定義一個全局變量,也會被$GLOBALS管理。
<html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <?php $a=100; echo "<pre>"; print_r($GLOBALS); echo "</pre>"; ?> </body> </html>
$_FILES
使用表單的file輸入域上傳文件時,必須使用post提交。但在服務(wù)器文件中,并不能通過$_POST超全局?jǐn)?shù)組獲取到表單中file域的內(nèi)容。而$_FILES超全局變量是通過post方法傳遞的已上傳文件項目組成的數(shù)組。$_FILES是一個二維數(shù)組,包含5個子數(shù)組元素,其中第一個下標(biāo)是表單中file輸入域的名稱,第二個下標(biāo)用于描述上傳文件的屬性。
$_COOKIE
$_COOKIE超全局?jǐn)?shù)組是經(jīng)由HTTP Cookies方法提交至腳本的變量。通常這些Cookies是由以前執(zhí)行的PHP腳本通過setCookies()函數(shù)設(shè)置到客戶端瀏覽器中的,當(dāng)PHP腳本從客戶瀏覽器提取了一個cookie后,它將自動把它轉(zhuǎn)換成一個變量,可以通過這個$_COOKIE超全局?jǐn)?shù)組和cookie的名稱來存取指定的cookie值。
$_SESSION
會話控制是在服務(wù)器端使用session跟蹤用戶,當(dāng)服務(wù)器頁面中使用session_start()函數(shù)開啟session后,就可以使用$_SESSION數(shù)組注冊全局變量,用戶就可以在整個網(wǎng)站中訪問這些會員信息。
說明:$_COOKIE、$_SESSION、$_REQUEST的區(qū)別
在 PHP 中,cookie 就是服務(wù)器,它是留在客戶端(瀏覽器)上的一個小的數(shù)據(jù)文件,通常用于標(biāo)識用戶信息,也稱為瀏覽器緩存或 Cookies。
$_COOKIE[] 全局?jǐn)?shù)組存儲了通過 HTTP COOKIE 傳遞到腳本的信息,PHP 可通過 setcookie() 函數(shù)設(shè)置 COOKIE 的值,用 $_COOKIE[] 數(shù)組接收 COOKIE 的值,$_COOKIE[] 數(shù)組的索引為 COOKIE 的名稱。
session 是一種客戶與網(wǎng)站(服務(wù)器)更為安全的對話方式,一旦開啟了 session 會話,便可以在網(wǎng)站的任何頁面使用(保持)這個會話,從而讓訪問者與網(wǎng)站之間建立了一種“對話”機(jī)制。但是 session 不同于 cookie,必須先啟動,才能生效。
$_SESSION[] 數(shù)組用于獲取會話變量的相關(guān)信息。
$_REQUEST 支持 $_GET 和 $_POST 發(fā)送過來的請求,即 get 和 post 它都可以接受,瀏覽器地址欄中的數(shù)據(jù)顯示不顯示要看傳遞的方法,get 會顯示在 url 中(有字符限制),post 不會顯示在 url 中,可以傳遞任意多的數(shù)據(jù)(只要服務(wù)器支持)。
默認(rèn)情況下,$_REQUEST[] 數(shù)組包含了 $_GET、$_POST 和 $_COOKIE 的數(shù)組。
推薦學(xué)習(xí):《PHP視頻教程》