2017-10-03 1 views
0

현재 서버에서 테스트를 실행할 프로그램이 있으며 테스트 결과가 test.php 파일로 전송됩니다. 내 POST 데이터를 reports.php 페이지로 리디렉션하려고하는데이 데이터는 JSON 형식이므로보고 할 데이터를 pages.php에 멋지게 표시하고 싶습니다 (결국). 지금 당장은 POST의 결과를 내 reports.php에 에코하여 문제를 해결하고 즉석에서 해결할 수 있습니다. 어떻게해야합니까? 현재 report.php를 열면 빈 페이지가 나타납니다. 이것은 내 test.php 파일에있는 것입니다.표시 할 다른 페이지로 POST JSON 데이터 리디렉션

test.php

#!/usr/bin/php 
<?php 
// turn on error reporting 
error_reporting(E_ALL); 
ini_set('display_errors', 'On'); 

//URL to POST JSON data to 
$url = "http://my/dir/to/reports.php"; 

$post_data = array(
    'id' => $argv[1], 
    'version' => $argv[2], 
    'server' => $argv[3], 
    'status' => $argv[4], 
    'test' => $argv[5], 
    'time' => $argv[6], 
    'body' => $argv[7], 
); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
curl_setopt($ch, CURLOPT_VERBOSE, TRUE); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
$result = curl_exec($ch); 

if (curl_error($ch)) { 
    echo 'Curl error: ' . curl_error($ch); 
} else { 
    echo "success: \n\n"; 
    print_r($result); 
} 
curl_close($ch); 
?> 

reports.php

<?php //reports.php 
//This php file is to receive the POST data coming from php files. 
if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    $token = $_POST['result']; 
    echo print_r($token); 
} 
?> 

답변

2

먼저 관찰.

echo print_r($token); 

당신은 에코, 또는 (인 print_r),이 두 가지를 모두 수행하지 않습니다 results.php에서 다음과 같은 있습니다. Echo는 문자열을 출력하고, print_r()은 문자열이나 사람이 읽을 수있는 객체 나 배열을 출력합니다. print_r()은 테스트에 좋지만 최종 코드는 인쇄하려는 출력을 페이지에 표시해야합니다. 당신이 당신이 개 PHP 파일, 즉 $result 사이에 변수 이름에 조금 혼란스러워지고처럼

어쨌든,

... 당신의 질문으로 보인다.

$post_data = array(
    'id' => $argv[1], 
    'version' => $argv[2], 
    'server' => $argv[3], 
    'status' => $argv[4], 
    'test' => $argv[5], 
    'time' => $argv[6], 
    'body' => $argv[7], 
); 

이 그래서 $_POST['id'], $_POST['version']이 설정됩니다 기타 : 여기

은 test.php에서 POST 데이터를,이 배열의 키가 reports.php에 게시됩니다 $ _POST 배열의 키가 될 것입니다 reports.php에

지금 여기 results.php에 대한 코드입니다 :

if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    $token = $_POST['result']; 
    echo print_r($token); 
} 

당신은 $_POST['result']를 참조하고 있지만, 결과는 배열 K 중 하나가 아닙니다 귀하가 게시하는 중이므로 설정되지 않으며 출력물이 비어있게됩니다. 당신은 $result을 reports.php의 응답을 포함하는 test.php의 변수로 정의했지만 reports.php는 정의되지 않았습니다.

모든 내용을 reports.php의 응답으로 되돌리려면 $_POST에 대한 배열 키를 지정하지 않아도됩니다. 전체 배열을 반환하면됩니다.

if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    print_r($_POST); 
} 

아니면 JSON로 원하는 경우 :

if ($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    echo json_encode($_POST); 
} 

마지막으로, 참고로 여기에 :

현재

나는 report.php을 열 때, 나는 빈 페이지를 얻을 수

브라우저에서 여는 경우 GE를 만들 때 비어있게됩니다. T 요청이 아니라 POST 요청. 그것은 당신이 그것에 데이터를 POST하는 경우에만 내용을 반환합니다.

이 모든 것을 말하면서 나는이 접근법으로 휠을 약간 재발견하려는 것처럼 느낍니다. 내 권장 사항은 RequestBin을 확인하여 POST 데이터에 대한 URL을 만들고 서버에서 오는 모든 요청을 검사 할 수 있습니다. 디버깅에 유용하며 무료입니다.

+0

와우 매우 유용합니다 !! 자세한 답변을 주셔서 대단히 감사드립니다. 몇 번에 걸쳐 그것을 읽게하고 병이 있으면 질문을합니다. 다시 한 번 감사드립니다! – kkmoslehpour

+0

요청 빈에 대해 올바르게 수행하고 있는지 확인하기 위해'test.php '에'$ url'을 요청 bin의 URL에 설정하고 그것을'reports.php'에서 검색합니까? '$ result = file_get_contents ('https://requestb.in/1i8lmm81'); ' 'echo $ result;'? 나는 이것을 시도했지만 reports.php는 여전히 공백이다. 그러나 새로 고친 후 요청 빈 페이지에 게시 데이터가 표시됩니다. – kkmoslehpour

+1

reports.php를 변경할 필요가 없습니다. 브라우저에서 요청 bin을 검사 한 후 새로 고침하고 그런 식으로 디버깅하면됩니다. 일단 기대했던대로 작동하게되면 reports.php를 다시 가리키게됩니다. – miknik