$ _POST 대 $ _SERVER [ 'REQUEST_METHOD'] == 'POST'
어떤 사람이 if ($_SERVER['REQUEST_METHOD'] == 'POST')
대신 Snipplr 제출물 중 하나를 "쓰레기"라고 불렀습니다.if ($_POST)
요청 방법을 확인하는 것이 더 정확 해 보입니다. 둘 사이에 운영상의 차이점이 있습니까? 아니면 코드 명확성 문제입니까?
글쎄, 그들은 실제로 같은 일을하지 않습니다.
$_SERVER['REQUEST_METHOD']
요청 방법을 포함합니다 (서프라이즈).
$_POST
게시물 데이터를 포함합니다.
POST 요청에 POST 데이터가 포함되어 있지 않을 수 있습니다.
요청 방법을 확인합니다. 실제로는 $_POST
어레이 테스트에 대해 생각하지 않았습니다 . 그래도 필요한 게시물 필드를 확인합니다. 따라서 빈 게시물 요청은 사용자에게 많은 오류 메시지를 제공합니다.
if ($_SERVER['REQUEST_METHOD'] == 'POST')
올바른 방법으로 게시물 데이터없이 게시물 요청을 보낼 수 있습니다.
$_POST
더 큰 POST 데이터와 업로드 된 파일에 문제가 생길 때까지 확인했습니다 . 이 설정 지시어는 post_max_size
과 upload_max_filesize
- 그들 중 하나라도 초과하면 $_POST
배열은 채워지지 않습니다.
따라서 "안전한 방법"은 확인하는 것 $_SERVER['REQUEST_METHOD']
입니다. 그래도 여전히 isset()
모든 $_POST
변수 를 사용해야 하며 확인 여부에 관계없이 중요하지 않습니다 $_SERVER['REQUEST_METHOD']
.
애플리케이션이 post 유형의 요청에 응답해야하는 경우 다음을 사용하십시오.
if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') { // if form submitted with post method
// validate request,
// manage post request differently,
// log or don't log request,
// redirect to avoid resubmition on F5 etc
}
애플리케이션이 사후 요청을 통해 수신 된 데이터에 응답해야하는 경우 다음을 사용하십시오.
if(!empty($_POST)) { // if received any post data
// process $_POST values,
// save data to DB,
// ...
}
if(!empty($_FILES)) { // if received any "post" files
// validate uploaded FILES
// move to uploaded dir
// ...
}
구현에 따라 다르지만 + $ _FILES superglobal을 둘 다 사용하게됩니다.
대부분의 브라우저에서 enter 키를 눌러 양식을 제출할 수 있지만 (예 : 제출 버튼을 클릭하지 않아도) 제출 변수를 반드시 변수로 보낼 필요는 없습니다. 따라서 빈 양식을 제출할 $_POST
수 있습니다. 즉, 비어 있지만 양식은 계속 PHP 페이지에 http 게시 요청을 생성했습니다. 이 경우 if ($_SERVER['REQUEST_METHOD'] == 'POST')
더 좋습니다.
둘 다 맞습니다. 개인적으로 나는 당신의 접근 방식이 그 장황함에 비해 더 좋을 것을 선호하지만 실제로는 개인 취향에 달려 있습니다.
반면에 if ($ _ POST)를 실행하면 오류가 발생하지 않습니다. 요청이 POST 헤더와 함께 전송되었는지 여부에 관계없이 $ _POST 배열이 존재합니다. 빈 배열은 부울 검사에서 false로 캐스팅됩니다.
$this->method = $_SERVER['REQUEST_METHOD'];
if ($this->method == 'POST' && array_key_exists('HTTP_X_HTTP_METHOD', $_SERVER)) {
if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'DELETE') {
$this->method = 'DELETE';
} else if ($_SERVER['HTTP_X_HTTP_METHOD'] == 'PUT') {
$this->method = 'PUT';
} else {
throw new Exception("Unexpected Header");
}
}
둘 이상의 방법으로 PHP 스크립트에 액세스해야하는 한 실제로 수행하는 작업은 다음과 같습니다.
if (in_array($_SERVER['REQUEST_METHOD'],array("GET","POST","DELETE"))) {
// do wathever I do
}
It checks whether the page has been called through POST (as opposed to GET, HEAD, etc). When you type a URL in the menu bar, the page is called through GET. However, when you submit a form with method="post" the action page is called with POST.
It's really a 6 of one, a half-dozen of the other situation.
The only possible argument against your approach is $_SERVER['REQUEST_METHOD'] == 'POST' may not be populated on certain web-servers/configuration, whereas the $_POST array will always exist in PHP4/PHP5 (and if it doesn't exist, you have bigger problems (-:)
They both work the same way, but $_POST
should be used as it is cleaner. You can add isset()
to it to check it exists.
참고URL : https://stackoverflow.com/questions/409351/post-vs-serverrequest-method-post
'Programming' 카테고리의 다른 글
내 리눅스 시스템에서 모든 사람을 위해 환경 변수를 설정하는 방법은 무엇입니까? (0) | 2020.07.11 |
---|---|
자바 8 : 스트림과 컬렉션의 성능 (0) | 2020.07.11 |
MySQL에서 빈 값을 허용하는 고유 제한 (0) | 2020.07.11 |
객체를 JSON 문자열로 변환 (0) | 2020.07.11 |
도끼 삭제 vs 도끼 = 정의되지 않음 (0) | 2020.07.11 |