将所有GET请求存储在单个变量PHP中
我试图将发送到站点的所有变量存储在一个变量中(仅用于日志记录) 因此,如果用户访问www.mysite.com并使用?id=4&auth=230984721839 我想获取这两个get并将它们存储在一个变量中,比如$get 我试着:将所有GET请求存储在单个变量PHP中,php,variables,post,get,Php,Variables,Post,Get,我试图将发送到站点的所有变量存储在一个变量中(仅用于日志记录) 因此,如果用户访问www.mysite.com并使用?id=4&auth=230984721839 我想获取这两个get并将它们存储在一个变量中,比如$get 我试着: $gets = print_r($_GET); $posts = print_r($_POST); 但它没有起作用。这可能吗?我不想让用户知道我正在捕获这些 我也想抢帖子了 $\u服务器['QUERY\u STRING']。看 这将为您提供未解析的查询,因此您可以
$gets = print_r($_GET);
$posts = print_r($_POST);
但它没有起作用。这可能吗?我不想让用户知道我正在捕获这些
我也想抢帖子了
$\u服务器['QUERY\u STRING']
。看
这将为您提供未解析的查询,因此您可以捕获任何可能对日志记录有用的无效URL。首先,您可能会意识到所有参数,包括GET和POST参数,都收集在
$\u REQUEST
中
第二,不要使用print\r
。这将打印出变量,而不会给出任何合理的结果。相反,只要说
$params = $_REQUEST;
如果你想要原始数据,那么你可以在@MichałŠrajer的答案(get)和评论(POST)中获得它。所以
您可以添加一个标志,告诉它返回结果,而不是输出结果
$gets = print_r($_GET, true);
$posts = print_r($_POST, true);
但是,您可能希望查看关联数组
更新
根据您对问题的评论,我想您确实希望:
$gets = $_SERVER['QUERY_STRING'];
$posts = file_get_contents('php://input');
如果希望
$\u GET
和$\u POST
都作为查询字符串,可以执行以下操作:
$gets = http_build_query($_GET);
$posts = http_build_query($_POST);
通过这段代码,您可以获取任何POST或get值,然后—也许—将它们放入数组中供以后使用
foreach ($_REQUEST as $key => $value ) {
##Do what you want here - may be push values into array here
}
出于存储目的,还有另一种可能性,那就是使用$\u GET数组
$data = serialize($_GET);
然后在数据库中存储$data
例如,如果get字符串是?foo=bar
您将得到以下字符串a:1:{s:3:foo;s:3:bar;}
您可以使用
unserialize($data)反序列化它
您希望$get
的内容是什么样子的?@jondavidjohn嗯,我希望它与发送时完全一样。因此,如果sent id=3&auth=1,我希望它只显示在$\u SERVER
中,其中一个值可能具有您想要的值。执行var\u dump($\u服务器)
查看其中的内容。我想这是$\u服务器['QUERY\u STRING']
或其他东西。@Michael这也会抓取帖子吗?@jdadi:POST变量不是查询字符串的一部分,所以,不。我也想抓取帖子变量!有一个单独的变量$HTTP\u RAW\u POST\u DATA
。另外,您可能对$\u SERVER['REQUEST\u METHOD']
感兴趣,它会告诉您使用了什么方法。我认为http\u get\u REQUEST\u body
不是一个标准的PHP函数。docs页面显示它位于pecl_http
中。出于日志目的,最好获取未分析的数据以捕获任何非法查询。
$data = serialize($_GET);