>백엔드 개발 >PHP 문제 >PHP 양식으로 제출된 데이터가 손실된 경우 어떻게 해야 합니까?

PHP 양식으로 제출된 데이터가 손실된 경우 어떻게 해야 합니까?

藏色散人
藏色散人원래의
2020-07-11 10:52:423241검색

PHP 데이터 손실에 대한 해결 방법: 먼저 양식 제출 요청의 무결성을 확인한 다음 요청 데이터가 PHP 또는 nginx 제한을 초과하는지 확인한 다음 "file_get_contents('php://input')를 통해 원본 요청 데이터를 직접 가져옵니다. "; 최종 수정 max_input_var 번호.

PHP 양식으로 제출된 데이터가 손실된 경우 어떻게 해야 합니까?

PHP 양식 제출 시 데이터 손실 문제

오늘 사용자 Excel 가져오기를 처리할 때 작은 문제가 발생했습니다.

요구 사항은 다음과 같습니다. 사용자가 Excel을 가져온 후 PHPExcel을 사용하여 가져온 데이터를 읽습니다. 양식을 렌더링하면 사용자는 가져온 데이터의 무결성을 확인하기 위해 양식을 확인한 다음 마지막으로 데이터베이스에 대한 항목을 확인합니다.

PHP 양식으로 제출된 데이터가 손실된 경우 어떻게 해야 합니까?

하지만 사용자가 엑셀에서 많은 양의 데이터를 가져오기 때문에 양식이 렌더링된 후 입력이 6,000개가 넘고 제출(POST) 시 양식이 직접 제출되므로 배경에서는 작은 부분만 읽을 수 있습니다. 이전 데이터의 일부입니다.

추적

1. 양식 제출 요청의 무결성을 확인하세요

제출 중 http 요청을 추적한 결과, 모든 데이터가 정상적으로 제출된 것으로 확인되었습니다.

2. 요청 데이터가 php 또는 nginx 제한을 초과하는지 확인하세요

Request Headers 아래의 Content-Length를 보면 약 20KB인 218558B에 불과한 것으로 확인됩니다. 이것은 확실히 한계를 충족하지 않습니다.

3. file_get_contents('php://input')를 통해 직접 요청 데이터를 가져옵니다

$_POST를 사용하여 데이터의 일부만 직접 가져오기 때문에 php://input을 사용하여 직접 가져올 수 있습니다. 이렇게 전송하여 얻은 데이터가 완전한 것으로 확인됩니다.

4.parse_str 함수를 통해 원본 요청 매개변수를 구문 분석합니다.

parse_str로 원본 입력 데이터를 구문 분석할 때

...
$origin = file_get_contents('php://input');
parse_str($origin, $result);
var_dump($result);

오류가 발생했습니다.

Warning: parse_str(): Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini

이 시점에서는 문제가 어디에 있는지 이해해야 합니다.

5. php.ini

# 默认的 php.ini 配置
# How many GET/POST/COOKIE input variables may be accepted
# max_input_vars = 10000

에서 max_input_var 수를 수정하세요. 기본 구성에서는 요청(GET/POST/COOKIE)에 대한 최대 입력 수만 1000개로 허용합니다.

php.ini에서 max_input_var 값을 적절하게 수정하면 문제가 해결됩니다.

물론 최종 해결책은 ajax를 통해 json 형식 데이터를 제출하는 것이었습니다. 결국 php.ini의 구성을 수정하는 것은 여전히 ​​이상적이지 않습니다.

End

PHP에 이런 제한이 있다는 걸 몰랐기 때문에 여기서 뒤집었습니다

자세한 관련 지식은 PHP 중국어 홈페이지를 방문해주세요!

위 내용은 PHP 양식으로 제출된 데이터가 손실된 경우 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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