>  기사  >  백엔드 개발  >  PHP에서 php://input을 사용하여 동일한 이름의 양식 데이터 처리하기 value_php 팁

PHP에서 php://input을 사용하여 동일한 이름의 양식 데이터 처리하기 value_php 팁

WBOY
WBOY원래의
2016-05-16 20:24:101080검색

지난해 10월 제 블로그에서 동일한 프런트 엔드 이름 값을 가진 양식 제출 데이터를 수신하는 PHP 처리 문제를 분석한 적이 있습니다. 당시 언급된 해결 방법은 이름 값을 변경하는 것이었습니다. 배열 유형인 php로 수신한 후 배열이 병합됩니다. 이 방법의 단점은 프런트 엔드 양식과 완전히 호환되지 않으며 사용자가 양식을 변경해야 한다는 것입니다. 시스템 요구 사항은 모든 업그레이드가 사용자에게 완전히 투명해야 한다는 것이므로 이 방법은 아직 완벽하지 않습니다.

거의 1년 동안의 축적 끝에 저는 php가 입력/출력 스트림에 액세스하는 원시적인 방법을 제공한다는 사실을 발견했습니다. php://input:
을 통해 POST 데이터를 얻을 수 있습니다.

코드 복사 코드는 다음과 같습니다.

php://input은 요청된 원시 데이터에 대한 액세스를 제공하는 읽기 전용 스트림입니다. POST 요청의 경우 $HTTP_RAW_POST_DATA 대신 php://input을 사용하는 것이 더 좋습니다. 이는 특정 php.ini 지시어에 의존하지 않기 때문입니다. 또한 이 경우 $HTTP_RAW_POST_DATA는 기본적으로 채워지지 않으므로 Always_populate_raw_post_data를 활성화하는 것보다 메모리가 덜 필요할 수 있습니다. enctype=”multipart/form-data”인 경우 php://input이 유효하지 않습니다.
php://input으로 열린 데이터 스트림은 한 번만 읽을 수 있습니다. 데이터 스트림은 탐색 작업을 지원하지 않습니다. 그러나 SAPI 구현에 따라 요청 본문 데이터가 저장되면 다른 php://input 데이터 스트림을 열고 다시 읽을 수 있습니다. 일반적으로 이는 POST 요청에만 해당되며 PUT 또는 PROPFIND와 같은 다른 요청 방법에는 해당되지 않습니다.

따라서 동일한 이름 값을 가진 양식 데이터를 얻기 위해 php를 사용하는 아이디어는 다음과 같습니다. 1. php://input을 통해 원본 POST 데이터를 가져옵니다. 2. 데이터를 처리하고 병합합니다. -처리된 값 할당 시스템 변수 $_POST에 다음과 같은 함수가 정의됩니다.

function GET_SUBMIT(){
 if(empty($_POST)) return $_POST;
 //判断提交类型
 if($_SERVER["HTTP_CONTENT_TYPE"] != 'application/x-www-form-urlencoded'){
 return $_POST;
 }
 //获取POST原始值
 $data= file_get_contents("php://input");
 if(empty($data)) return $_POST;
 //开始处理
 $POST=array();
 $list=explode('&',$data);
 foreach($list as $key=>$value){
 //获取POST的KEY和Value值
 $postname=urldecode(substr($value,0, stripos($value,"=")));
 $postvalue=urldecode(substr($value,(stripos($value,"=")+1)));
 //对KEY值和Value值进行处理
 //去空格和[]
 $postname=trim($postname,' ,[,]');
 $postvalue=trim($postvalue);
 if(array_key_exists($postname,$POST)){
  $POST[$postname]=$POST[$postname]." ,".$postvalue;
 }else{
  $POST[$postname]=$postvalue;
 }
 }
 return $POST;
}

다음으로 필요한 경우 "$_POST=GET_SUBMIT()"를 사용하고 나중에 $_POST를 사용하여 처리 후 각 양식의 데이터를 가져올 수 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.