GET 또는 POST에 관계없이 외부 변수를 단일 개체로 조합하는 php 함수

StackOverflow https://stackoverflow.com/questions/524413

  •  22-08-2019
  •  | 
  •  

문제

다른 사람의 PHP 코드를 한 번 검토한 적이 있는데 그 사람은 모든 GET 및 POST 변수를 하나의 일반 객체로 롤링하여 전달할 수 있는 함수나 클래스 메서드를 가지고 있었습니다.GET과 POST에 동일한 이름-값 쌍이 나타나면 POST가 승리합니다.

정확히 이 기능을 수행하는 잘 코딩된 PHP 추가 기능이 있습니까?

도움이 되었습니까?

해결책

당신은 사용할 수 있습니다 $_REQUEST, 그러나 여기에는 다음 내용이 포함되어 있습니다. $_GET, $_POST 그리고 $_COOKIE, 그리고 이 슈퍼 전역 변수의 존재(및 덮어쓰기 목적을 위한 순서)는 실행 환경의 구성에 따라 달라집니다.

이로 인해 문제가 발생하는 경우 간단한 버전을 롤업하는 것이 좋습니다. 그 핵심은 다음과 같습니다.

$requestData = array_merge( $_GET, $_POST );

그런 다음 이를 어떤 방식으로 마무리하여 추가로 유용한 기능을 제공할 수 있습니다.자동으로 적용 stripslashes() 다음을 사용하여 엉망이 된 값에 magic_quotes, 누락된 변수에 대한 기본값 제공 등

다른 팁

두 변수를 모두 병합합니다 (또는 사용 $_REQUEST 또는 글로벌 등록 대신) 값의 출처를 확실하게 식별 할 수 없으므로 보안 결함을 유발할 수 있습니다. 따라서 액세스 할 때 $_REQUEST['foobar'] URL, 우편 본문 또는 쿠키를 통해 값이 전송되었는지 알 수 없습니다. 이로 인해 스크립트가 취약해질 수 있습니다 크로스 사이트 요청 위조.

따라서 편안함을 통해 보안을 찾아 값이 출처를 기대하는 변수를 사용하는 것이 좋습니다. $_GET URL이 통과 할 것으로 예상되는 인수의 경우 $_POST 우편을 통해 통과 한 사람들을 위해 $_COOKIE 쿠키 용.

나는 그것이 갈라지는 것이 나쁜 관행을 고려할 것입니다 $_GET ~와 함께 $_POST. 그것들은 완전히 다른 것들을위한 것이며, 그것들을 동등하게 취급함으로써, 당신은 HTTP 프로토콜을 효과적으로 오용하고 있습니다. 말한 바와 같이, $_REQUEST 당신이 원하는 것을하지만 조금 예측할 수 없습니다. 당신은 자신의 글로벌 기능을 쉽게 작성하여 동일한 작업을 수행 할 수 있습니다.

function param($name, $default = null) {
  return isset($_POST[$name])
    ? $_POST[$name]
    : (isset($_GET[$name])
      ? $_GET[$name] 
      : $default);
}

하지만 정말 .. 나쁜 연습입니다.

$ _request Global Variable을 사용할 수 있습니다. PHP를 사용하여 웹 기반 애플리케이션을 작성할 때 응용 프로그램의 경우 웹 SAPI (CGI 또는 웹 서버 모듈과 같은)에서 응용 프로그램이 실행될 때 기본적으로 해석 된 PHP에 의해 정의됩니다. $ _request는 $ _get 및 $ _post의 모든 데이터의 연관 배열이며 기본적으로 정의됩니다. 이를 사용하려면 확장/라이브러리가 필요하지 않습니다.

이것은 앱 전체의 글로벌을 처리하는 내 프레임 워크의 클래스입니다. 변수의 처리는 여기서 수행되지 않습니다.

class stGlobal

{

//instance
private static $instance;

//global settings
public $post = '';
public $get = '';
public $files = '';
public $request = '';

private function initialize()
{
    $this->post = $_POST;
    $this->get = $_GET;
    $this->files = $_FILES;
    $this->request = $_REQUEST;
}

public function getInstance()
{
    if (!isset(self::$instance))
    {
        $class = __CLASS__;
        self::$instance = new $class();
        self::$instance->initialize();
    }
    return self::$instance;
}

}

어디서나 사용합니다

$myObj = stGlobal::getInstance();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top