어떤 사람이 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을 둘 다 사용하게됩니다.
답변
둘 다 맞습니다. 개인적으로 나는 당신의 접근 방식이 그 장황함에 비해 더 나은 것을 선호하지만 실제로는 개인 취향에 달려 있습니다.
반면에 if ($ _ POST)를 실행하면 오류가 발생하지 않습니다. 요청이 POST 헤더와 함께 전송되었는지 여부에 관계없이 $ _POST 배열이 존재합니다. 빈 배열은 부울 검사에서 false로 캐스팅됩니다.
답변
대부분의 브라우저에서 enter 키를 눌러 양식을 제출할 수 있지만 (예 : 제출 버튼을 클릭하지 않아도) 제출 변수를 반드시 변수로 보낼 필요는 없습니다. 따라서 빈 양식을 제출할 $_POST
수 있습니다. 즉, 비어 있지만 양식은 계속 PHP 페이지에 http 게시 요청을 생성했습니다. 이 경우 if ($_SERVER['REQUEST_METHOD'] == 'POST')
더 좋습니다.
답변
$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");
}
}