Skip to content

file_get_contents("php://input")가 XML이 아니면 $GLOBALS['HTTP_RAW_POST_DATA']가 설정되지 않음 #1686

@YJSoft

Description

@YJSoft
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'] 값을 사용하는 것이 아니므로 위 조건문은 없애야 맞는 것 같습니다. 조건문을 추가하신 것에 이유가 있나요?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions