if(!isset($GLOBALS['HTTP_RAW_POST_DATA']) && version_compare(PHP_VERSION, '5.6.0', '>=') === true) {
if(simplexml_load_string(file_get_contents("php://input")) !== false) $GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents("php://input");
}
simplexml_load_string(file_get_contents("php://input")) 이 false가 아닐때만, 즉 post body가 XML이 아닐 때에만 $GLOBALS['HTTP_RAW_POST_DATA'] 변수 값이 설정됩니다.
이 때문에, $GLOBALS['HTTP_RAW_POST_DATA'] 값을 설정하지 않는 php 5.6 이상 버전에서 exec_json으로 실행되는 액션이 전부 오동작하는 문제점이 있습니다.
json post body값은 당연히 XML이 아니고(key1=value1&key2=value2 형식입니다), 따라서 $GLOBALS['HTTP_RAW_POST_DATA'] 값이 설정되지 않으므로 JSON 값을 불러오지 못하게 되는 것이죠.(덕분에 몇시간이나 삽질했습니다)
이는 #1684 같은 문제를 일으킬 수 있습니다. 왜 조건문이 있는지는 모르겠지만, XML일 때에만 $GLOBALS['HTTP_RAW_POST_DATA'] 값을 사용하는 것이 아니므로 위 조건문은 없애야 맞는 것 같습니다. 조건문을 추가하신 것에 이유가 있나요?
simplexml_load_string(file_get_contents("php://input")) 이 false가 아닐때만, 즉 post body가 XML이 아닐 때에만
$GLOBALS['HTTP_RAW_POST_DATA']변수 값이 설정됩니다.이 때문에,
$GLOBALS['HTTP_RAW_POST_DATA']값을 설정하지 않는 php 5.6 이상 버전에서 exec_json으로 실행되는 액션이 전부 오동작하는 문제점이 있습니다.json post body값은 당연히 XML이 아니고(
key1=value1&key2=value2형식입니다), 따라서$GLOBALS['HTTP_RAW_POST_DATA']값이 설정되지 않으므로 JSON 값을 불러오지 못하게 되는 것이죠.(덕분에 몇시간이나 삽질했습니다)이는 #1684 같은 문제를 일으킬 수 있습니다. 왜 조건문이 있는지는 모르겠지만, XML일 때에만
$GLOBALS['HTTP_RAW_POST_DATA']값을 사용하는 것이 아니므로 위 조건문은 없애야 맞는 것 같습니다. 조건문을 추가하신 것에 이유가 있나요?