慎用PHP REQUEST陣列

2021-08-25 14:57:09 字數 1497 閱讀 2225

不過,從今以後我會盡量不再使用$_request這個陣列,因為以前對這個陣列有些一知半解,總以為用起來簡單,並且隨心所欲,和$_get與$_post一樣,而且由系統為我判斷,多好。下面我就來簡單的介紹一下為何不應該使用$_request這個陣列。

我們都知道,處理表單資料,可以使用php的$_get和$_post這兩個超全域性變數,具體是哪個由form表單提交時的method指定。除此 之外php還為我們提供了$_request陣列。但是其不僅包含$_get和$_post的所有資料元素,同時其還會包含$_cookie這個超全域性數 組的所有資料元素。

可是大家有沒有想過,如果這三個陣列裡面的key相同,那麼我用$_request得到的到底是哪個陣列的值呢?會不會有什麼問題?

<?php

var_dump($_get['a'],$_post['a'],$_request['a']);

?>

當我提交表單的時候,我獲取的頁面內容為:

string(3) "***" string(3) "yyy" string(3) "yyy"
同樣的內容,在$_request裡面,post的值覆蓋了get的值,這到底是怎麼回事呢?

其實這是在php的配置檔案裡面設定的,讓我們來看一下php.ini這個配置檔案,在第466行左右有如下內容:

; this directive describes the order in which php registers get, post, cookie,

; environment and built-in variables (g, p, c, e & s respectively, often

; referred to as egpcs or gpc). registration is done from left to right, newer

; values override older values.

variables_order = "egpcs"

這個egpcs就是說明用$_request陣列獲取內容的優先順序,其字母的含義分別代表為:e代表$_env,g代表$_get,p代表$_post,c代表$_cookie,s代表$_session。後面出現的資料會覆蓋前面寫入的資料,其預設的資料寫入方式就是egpcs,所以post包含的資料將覆蓋get中使用相同關鍵字的資料。

所以為了避免此問題,我們應該明確的使用$_get和$_post全域性變數,在要用到$_request 的時候想一下,是不是真的需要用$_request,為什麼提交的方式不是固定的,這樣設計程式是否有問題?是否是設計過度,也許我們為了可擴充套件性卻導致 了意想不到的問題發生,這顯然是不值得的,而且提交方式只能有一種,為什麼要考慮兩種情況呢?

1. 盡量不要設定全域的cookie,如果不是必須的話

2. 建議不使用request 方法來獲取變數

**

PHP Request請求封裝

request請求封裝 class request package tool class request if filter var url,filter validate url unset parts 請求引數格式轉換成陣列 if json strtolower method 頭部格式轉換 he...

慎用for迴圈

1.for迴圈會在迴圈以外的scope建立乙個區域性變數,看下面 for i in 1,2,3 do p iend 123 p i 3這和each是有區別的,each只是會改變scope外面已存在的區域性變數 1,2,3 each do i print i endp i undefined loca...

慎用url重寫

為了使 url位址更加友好 當然可能有別的原因 很多站點使用了 url重寫,如http www.cnblogs.com life,在asp.net中通常要處理這樣的 url重寫,必須在iis中將 對映到aspnet isapi.dll c windows microsoft.net framewor...