2026, 새로운 도약을 시작합니다.

php://input 질문드립니다 채택완료

allow_url_fopen = on 으로 설정 되어 있으며 PHP Version 7.4.24 입니다

서버는 데비안 10 , nginx 로 설치되어 있네요

도메인/shop/state  라는 폴더 내에 index.php 가 있습니다

index.php 내용은 

Copy


$json = file_get_contents("php://input");

$POST = json_decode($json, true);

sql_query(" insert into xxx_test ( xx_time, cm ) values ( '".G5_TIME_YMDHIS."', '".$_SERVER['CONTENT_TYPE']."' ) ");

 

sql_query(" insert into xxx_test ( xx_time, cm ) values ( '".G5_TIME_YMDHIS."', '".$_POST."' ) ");

위처럼 확인 후 업체에서 데이터를 보낸 후 db를 확인 하면 

$_SERVER['CONTENT_TYPE']  == > "application/json;charset=UTF-8""

$POST  ==> ""  

위처럼 $_POST 값은 공란 입니다

요청을 받아야 하는 json 데이터는

{
   "StoreId": "T0022",    
}

이런식 이어야 합니다

그런데 업체에서 보낸  로그 값을 보면 

요청 값이

2022/02/16 07:00:51.290 [DEBUG] [05177] [apis/spiderOutApi.go:225 (OLIF/apis.SPORequestAPI)] [카드] Converted API. Path[도메인/shop/state], Body[{"StoreId":"T0022"}]

이렇게 로그가 있다는데 

왜 POST 에는 아무 값도 없는걸로 나올까요

저쪽 업체에서 이쪽으로 데이터가 아무것도 인넘어 온거던지

아니면 제쪽에서 데이터를 못읽는 거든지 어쨌든 둘중 하난데 ...

위 아이디를 통해

회원정보 검증 후

Copy


$body_data = array(

    "ResultCode" => "0000",

    "ResultMessage" => "성공",

    "StoreId" => "T0022",

    "Name" => "홍길동",

    "UseYN" => "Y"

);



$output_data = json_encode($body_data, JSON_UNESCAPED_UNICODE);



Header('Content-Type: application/json');

print_r($output_data);

위 처럼만 동일페이지에서 아이디 받고 회원 검증만 해주고 출력만 해주면 끝 입니다.

임의로 회원검증 데이터를 처리 해주면 문제가 없는데

json으로 아이디를 받고 해당 회원이 정상 적인 회원인지 쿼리 처리 후

데이터 반환을 해야 하는데 아이디가 안들어 오는건지 읽지를 못하는건지 ..

몇시간째 돌겠네요 ㅜㅜ;;;

어떤 문제일까요??

그리고 혹시 로그나 다른 데이터가 들어가 있는지 확인해 볼수 있는 방법이 있을까요?

///////////////////////////////////////////////////////////////

아무래도 받는 쪽.. 제쪽에서 문제가 있는것 같습니다..

다른 사이트에서 curl 로

해당 url .. 그러니까 

url = '도메인/shop/state'; 로 id를 전송할 때

도메인/shop/state/index.php  에서 

$json = file_get_contents("php://input");

이 부분이 동작을 안하는것 같습니다;;

혹시 이유를 알수 있을까요...;;

혹시 서버 설정 에서 뭔가를 더 해줘야 하는건가요? -->

확인해 보니 이건 아닌것 같습니다;;

해당 동일 서버의 다른 사이트에서

리턴 값을 php://input 로 받는 사이트가 있는데 여기는 동작을 잘 하고 있네요;;

흠 .. 뭐가 문제인지...

////////////////////////////////////////////

혹시 테스트가 가능하신 분들은  테스트 부탁 드립니다

Copy


function get_cm_curl($data){

    

    global $g5, $config;

    $method = "POST";

    $url = 'https://sp.cmake.work/shop/state/';// 

    

    $headers = array( 

        "content-type: application/json", 

        "accept-encoding: gzip" 

    );    

    $ch = curl_init($url); 

    $timeout = 900; // 900 Seconds = 15 Minutes     

    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);   

    curl_setopt($ch, CURLOPT_HEADER, 0); 

    curl_setopt($ch, CURLOPT_TIMEOUT, 30); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);

    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);      // POST DATA

    curl_setopt($ch, CURLOPT_POST, true);     

    

    $response = curl_exec($ch);

    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

    $error = curl_error($ch);

    curl_close($ch);

    return $response;

}

 

 

 

$body_data = array(

    "StoreId" => "T0022"

);

$json = get_cm_curl($body_data);

$_POST = json_decode($json, true);

 

print_r($json);

   

print_r에서 {"StoreId":null} NULL 이 나오면 안됩니다 ;;

해당서버에서 왜 값을 못받는지 이유를 알려 주시면 감사하겠습니다 ㅜㅜ;;

답변 4개

채택된 답변
+20 포인트

index.php에서 json처리를 하려면 보내는 쪽에서 json데이터를 보내야죠

$body_data = json_encode($body_data); //<---추가
$json = get_cm_curl($body_data);

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

아... 감사합니다 받는 쪽에만 신경을 썼더니 ...ㅜㅜ ;;; 잘 됩니다 정말 감사합니다

댓글을 작성하려면 로그인이 필요합니다.

받는 쪽이면 아래처럼 데이터 저장해서 파일 살펴보세요.

file_put_contents('./log.txt', file_get_contents('php://input').PHP_EOL, FILE_APPEND);

* 참고로 enctype="multipart/form-data"와 같이 사용 불가.

- https://www.php.net/manual/en/wrappers.php.php#wrappers.php.input

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

빈 값으로 들어 오고 있는것 같습니다..ㅜㅜ
줄바꿈만 있고 아이디 값은 하나도 없습니다.. ㅜㅜ
아.. 이해를 못하겠네요..
폴더권한도 755 707 777 로 다 줘 봤고 ...
서버에 포트도 열어줄건 다 열어 놓은것 같은데..
도대체 뭐가 문제인지 모르겠습니다 ^^;;;
원격으로 볼 수 있을까요? '-')?
아~ 감사합니다 해결 되었습니다. 관심 가져주셔서 감사드립니다. 보내는쪽에 json 변환 문제였습니다 ㅜㅜ;;

댓글을 작성하려면 로그인이 필요합니다.

테스트 하시면서 헷갈리실것 같아 https://sp.cmake.work/shop/state/ 의 내용을 다시 수정했습니다

Copy


$json = file_get_contents('php://input');

$data = json_decode($json, true);

$StoreId = 'NULL';

if(isset($data['StoreId'])){

    $StoreId = $data['StoreId'];

}

sql_query(" insert into xxx_test ( xx_time, cm, type, ip ) values ( '".G5_TIME_YMDHIS."', '".$_SERVER['CONTENT_TYPE']."', '아이디 json type', '".$_SERVER["REMOTE_ADDR"]."' ) ");

sql_query(" insert into xxx_test ( xx_time, cm, type, ip ) values ( '".G5_TIME_YMDHIS."', '".print_r($data, true)."' , '아이디 array - {$StoreId}', '".$_SERVER["REMOTE_ADDR"]."' ) ");

/* $body_id = array(

    "StoreId" => $StoreId

); */

/* $output_id = json_encode($body_id, JSON_UNESCAPED_UNICODE);

sql_query(" insert into xxx_test ( xx_time, cm ) values ( '".G5_TIME_YMDHIS."', '{$output_id}' ) "); */

if($StoreId == 'NULL'){

    $body_data = array(

        "ResultCode" => "400",

        "ResultMessage" => "실패",

        "StoreId" => $StoreId,

        "StoreName" => "회원정보없음",

        "UseYN" => "N"

    );

}else{

    $body_data = array(

        "ResultCode" => "0000",

        "ResultMessage" => "성공",

        "StoreId" => $StoreId,

        "StoreName" => "테스트매장",

        "UseYN" => "Y"

    );

}

/* $body_data = array(

    "StoreId" => "T00022"

);  */

$output_data = json_encode($body_data, JSON_UNESCAPED_UNICODE);

sql_query(" insert into xxx_test ( xx_time, cm ) values ( '".G5_TIME_YMDHIS."', '{$output_data}' ) ");

Header('Content-Type: application/json');

print_r($output_data);

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

https://sp.cmake.work/shop/state/ 에 직접 접속, 아래처럼 출력됩니다.

Copy
{"StoreId":null}
{"ResultCode":"0000","ResultMessage":"성공","StoreId":"T0022","StoreName":"테스트매장","UseYN":"Y"}

애초에 잘못된 결과값이라 json_decode()가 되지 않으니 CMAKE에 요청해야겠네요.

업체에서 본인들은 문제 없다, 로그 잘 찍힌다, 수정할 것 없다 그러면 그냥 아래처럼 잘라쓰면 되겠네요.

Copy


$json = get_cm_curl($body_data);

list(, $json) = explode('
', $json, 2);

$res = json_decode($json, true);

print_r($res);

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

아.. 밑에 성공 값은 file_get_contents('php://input'); 으로 상점 아이디가 넘어 왔을 때 회원정보에서
아이디를 확인 후 정보가 확인되면 성공값이 그렇게 나와야 한다는 예제 값입니다 ^^;
헷갈리실것 같아 https://sp.cmake.work/shop/state/ 내용을 수정했습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고