2011-12-23 54 views
2

请求我试图存储在一个变量发送到该网站的任何和所有的变量(只用于记录的目的。)商店都得到一个变量PHP

因此,如果用户去www.mysite。 ?COM和穿上ID = 4 & AUTH = 230984721839

我想抓住这两个的获取,并将它们存储在诸如$一个变量被

我尝试:

$gets = print_r($_GET); 
$posts = print_r($_POST); 

但它没有奏效。这甚至有可能吗?我不希望用户知道我正在捕获这些内容。

我也想抓住POSTs呢!

+1

反序列化你想要什么'$ gets'的内容看起来像? – jondavidjohn 2011-12-23 21:23:04

+0

@jondavidjohn好吧,我喜欢它发送的。所以如果发送id = 3&auth = 1,我希望它只显示 – 2011-12-23 21:23:50

+1

查看'$ _SERVER',其中一个值可能有你想要的。做'var_dump($ _ SERVER)'看看里面有什么。我认为它是'$ _SERVER ['QUERY_STRING']'什么的。 – 2011-12-23 21:25:53

回答

5

如果你想同时$_GET$_POST作为查询字符串,你可以这样做:

$gets = http_build_query($_GET); 
$posts = http_build_query($_POST); 
+0

+1这是另一个好方法 – Paulpro 2011-12-23 22:46:03

2

$_SERVER['QUERY_STRING']。请参阅this

这将为您提供未解析的查询,因此您可以捕获任何可能对记录目的有用的无效URL。

+0

该死的我无法在PHP.net上找到它。谢谢! – 2011-12-23 21:24:47

+0

@Michael做这个抢POSTs呢? – 2011-12-23 21:25:17

+0

@JDAudi:POST变量不是查询字符串的一部分,所以没有。 – 2011-12-23 21:26:53

2

首先,您可能会意识到所有参数(包括GET和POST)都收集在$_REQUEST中。其次,请勿使用print_r。这将打印变量,而不会给你任何明智的结果。相反,只是说

$params = $_REQUEST; 

如果你想的原始数据,那么你可以把它作为@MichałŠrajer的答案(GET)和评论(POST)。所以,

$get = $_SERVER['QUERY_STRING']; 
$post = file_get_contents("php://input"); 
+0

我不认为'http_get_request_body'是一个标准的PHP函数。文档页面说它在'pecl_http'中。 – 2011-12-23 21:29:02

+0

哦,真的......我会换个说法 – Amadan 2011-12-23 21:35:18

7

您可以将标志添加到print_r告诉它,而不是返回输出它的结果。

$gets = print_r($_GET, true); 
$posts = print_r($_POST, true); 

但是,您可能想要查看serializing关联数组。

更新

根据对你的问题你的意见,我想你真的想:

$gets = $_SERVER['QUERY_STRING']; 
$posts = file_get_contents('php://input'); 
+2

为了记录目的,可能会更好地获得未解析的数据来捕获任何非法查询。 – 2011-12-23 21:33:10

+0

@MichałŠrajer谢谢,我添加了一个更新到我的答案。 – Paulpro 2011-12-23 22:33:20

+2

对于''php:// input''+1。 – 2011-12-23 22:46:29

1

通过此代码,您可以获取任何POST或GET值,然后 - 可以将它们放入数组中呃使用

foreach ($_REQUEST as $key => $value) { 
     ##Do what you want here - may be push values into array here 
    } 
1

为了存储的目的还有另一种可能性,那就是serialize $ _GET数组。

$data = serialize($_GET); 

然后您在您的数据库中存储$data

例如,如果你的GET字符串是?foo=bar

你得到这个字符串a:1:{s:3:"foo";s:3:"bar";}

您可以用过unserialize($data);