2011-12-23 2 views
2

의 요청이 내가 하나의 변수에 사이트에 전송 된 모든 변수를 저장하기 위해 노력하고 GET (단지 로깅 목적으로합니다.) 스토어 모두 하나의 변수 PHP

그래서 만약 사용자가 www.mysite 간다. ? COM과에 넣어 ID = 4 & 인증 = 230984721839

내가

내가하려고했던 및 $ 등의 변수에 저장 가져옵니다 그 모두를 잡기 위해 도착합니다 :

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

하지만 작동하지 않았습니다. 이것은 가능한가? 사용자가 내가 이것을 캡쳐하고 있음을 알리고 싶지 않습니다.

나는 또한 POST를 잡고 싶습니다!

+1

로 직렬화 할 수 있습니다 ? – jondavidjohn

+0

@ jondavidjohn 글쎄, 나는 그것이 보내 졌을 때와 똑같이 보내고 싶다. 그래서 만약 id = 3 & auth = 1으로 보내면 그냥 그걸 보여줬으면합니다. –

+1

'$ _SERVER'을보세요. 그 중 하나가 당신이 원하는 것을 가질 수 있습니다. 거기에있는 것을보기 위해서'var_dump ($ _ SERVER)'를해라. 나는 $ _SERVER [ 'QUERY_STRING']'또는 무엇인가라고 생각한다. –

답변

5

당신은 쿼리 문자열로 모두 $_GET$_POST을 원하는 경우에, 당신은이 작업을 수행 할 수 있습니다

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

+1 이렇게하는 것도 좋은 방법입니다. – Paulpro

2

$_SERVER['QUERY_STRING']. this을 참조하십시오.

이렇게하면 구문 분석되지 않은 쿼리가 제공되므로 목적을 기록하는 데 유용한 잘못된 URL을 찾을 수 있습니다.

+0

젠장, PHP.net에서 그것을 찾을 수 없습니다. 고맙습니다! –

+0

@Michael도이 POST를 수행합니까? –

+0

@JDAudi : POST 변수는 쿼리 문자열의 일부가 아니므로 아니요. –

2

우선 GET 및 POST 매개 변수가 모두 $_REQUEST에 수집되어 있습니다.

둘째, print_r을 사용하지 마십시오. 그것은 변수를 출력 할 것이고, 당신에게 현명한 결과를주지는 않을 것입니다. 대신, 당신이 원시 데이터를 원하는 경우에, 당신이 대답 (GET)과 주석 (POST)의 @ MichałŠrajer 같이 그것을 얻을 수

$params = $_REQUEST; 

을 말한다. 그래서,

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

'http_get_request_body'가 표준 PHP 함수라고 생각하지 않습니다. docs 페이지는'pecl_http'에 있음을 알려줍니다. –

+0

아, 사실 ... 내가 다시 말하지만 – Amadan

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

로깅 목적으로, 불법 쿼리를 잡기 위해 분석되지 않은 데이터를 얻는 것이 더 나을 수도 있습니다. –

+0

@ MichałŠrajer 고마워, 나는 내 대답에 대한 업데이 트를 추가했습니다. – Paulpro

+2

"php : // input"에 +1. –

1

이 코드를 사용하면 POST 또는 GET 값을 얻을 수 있으며 lat - 어 사용

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

또 다른 가능성이 있으며, $ _GET 배열 serialize입니다.

$data = serialize($_GET); 

그리고 나서 $data을 데이터베이스에 저장하십시오.

하여 GET 문자열이 ?foo=bar

경우 예를 들어,이 문자열을 얻을 a:1:{s:3:"foo";s:3:"bar";}

혹시 당신은`$의 gets`의 내용과 같이 원하는 작업 unserialize($data);