将所有GET请求存储在单个变量PHP中

时间:2011-12-23 21:20:47

标签: php variables post get

我试图在一个变量中存储发送到站点的所有变量(仅用于记录目的。)

因此,如果用户访问www.mysite.com并加上?id = 4& auth = 230984721839

我想抓住这两个GET并将它们存储在一个变量中,例如$ gets

我在尝试:

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

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

我也想抓住POST!

6 个答案:

答案 0 :(得分:7)

您可以向print_r添加一个标记,告诉它返回结果而不是输出结果。

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

但是,您可能希望查看serializing关联数组。

<强>更新

根据您对问题的评论,我想您真的想要:

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

答案 1 :(得分:5)

如果您希望$_GET$_POST都作为查询字符串,则可以执行以下操作:

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

首先,您可能会意识到所有参数(包括GET和POST参数)都是在$_REQUEST中收集的。

其次,请勿使用print_r。那将打印变量,而不是给你任何明智的结果。相反,只需说出

$params = $_REQUEST;

如果您想要原始数据,那么您可以在@MichałŠrajer的回答(GET)和评论(POST)中获得它。所以,

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

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

$data = serialize($_GET);

然后将$data存储在数据库中。

例如,如果您的获取字符串为?foo=bar

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

您可以使用unserialize($data);

对其进行反序列化