[英]php function for collating external variables into a single object regardless of GET or POST
我記得曾經回顧過別人的PHP代碼,他有一個函數或類方法,該函數或類方法將所有GET和POST變量滾動到一個普通的舊對象中,然后可以將其傳遞出去。 如果GET和POST中都出現了相同的名稱/值對,則POST將獲勝。
是否有任何經過良好編碼的PHP插件可以做到這一點?
您可以使用$_REQUEST
,但是要知道它包含$_GET
, $_POST
和$_COOKIE
,並且該超全局變量中變量的存在(和順序,出於覆蓋目的)要在執行環境中進行配置。
如果這引起了問題,最好匯總一個簡單的版本,其關鍵是
$requestData = array_merge( $_GET, $_POST );
然后,您可以用某種方式將其包裝起來,也許提供其他有用的功能,例如自動將stripslashes()
應用於使用magic_quotes
破壞的值,為缺失變量提供默認值,等等。
合並這兩個變量(或使用$_REQUEST
或Register Globals代替)可能會導致安全漏洞,因為您無法明確標識其值的來源。 因此,在訪問$_REQUEST['foobar']
您無法確定該值是通過URL,POST正文還是Cookie發送的。 這會使您的腳本容易受到跨站點請求偽造的攻擊。
因此,我建議您為了安全而放心,並在期望值來自的地方使用這些變量。 $_GET
表示預期將通過URL傳遞的參數, $_POST
POST表示通過POST傳遞的參數, $_COOKIE
COOKIE表示cookie。
我認為將$_GET
與$_POST
合並是不好的做法。 它們用於完全不同的事物,並且通過將它們視為相等來有效地濫用HTTP協議。 如前所述, $_REQUEST
_ $_REQUEST
您的要求,但是有點不可預測。 您可以輕松編寫自己的全局函數來執行以下操作:
function param($name, $default = null) {
return isset($_POST[$name])
? $_POST[$name]
: (isset($_GET[$name])
? $_GET[$name]
: $default);
}
但是實際上..這是不好的做法。
您可以使用$ _REQUEST全局變量。 當您的應用程序在Web sapi(例如CGI或Web服務器模塊)中運行時,默認情況下由PHP解釋它的定義,當您使用PHP編寫基於Web的應用程序時就是這種情況。 $ _REQUEST是$ _GET和$ _POST中所有數據的關聯數組,默認情況下已定義。 不需要擴展名/庫就可以使用它。
這是我框架中的類,可處理整個應用程序中的全局變量。 此處不對變量進行任何處理。
class stGlobal
{
//instance
private static $instance;
//global settings
public $post = '';
public $get = '';
public $files = '';
public $request = '';
private function initialize()
{
$this->post = $_POST;
$this->get = $_GET;
$this->files = $_FILES;
$this->request = $_REQUEST;
}
public function getInstance()
{
if (!isset(self::$instance))
{
$class = __CLASS__;
self::$instance = new $class();
self::$instance->initialize();
}
return self::$instance;
}
}
在任何地方使用
$myObj = stGlobal::getInstance();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.