IncomingRequest Class

IncomingRequest 클래스는 브라우저와 같은 클라이언트의 HTTP 요청(request)에 대한 객체 지향 표현을 제공합니다. 아래 나열된 메소드 외에도 요청(Request)메시지(Message) 클래스의 모든 메소드에 액세스 할 수 있습니다.

Accessing the Request

클래스가 CodeIgniter\Controller를 상속 받았다면 클래스의 request 속성을 통해 요청(request) 클래스 인스턴스에 엑세스할 수 있습니다.

<?php namespace App\Controllers;

user CodeIgniter\Controller;

class UserController extends Controller
{
        public function index()
        {
                if ($this->request->isAJAX())
                {
                        . . .
                }
        }
}

컨트롤러가 아닌 곳에서 요청(Request) 객체에 액세스해야 하는 경우 서비스(Services) class를 통해 사본을 얻을 수 있습니다.

$request = \Config\Services::request();

컨트롤러 이외의 클래스에서 클래스 속성으로 엑세스하고 싶다면 요청(Request)을 종속성으로 전달하는 것이 좋습니다.

<?php
use CodeIgniter\HTTP\RequestInterface;

class SomeClass
{
        protected $request;

        public function __construct(RequestInterface $request)
        {
                $this->request = $request;
        }
}

$someClass = new SomeClass(\Config\Services::request());

요청 유형 결정

요청은 AJAX 요청 또는 커맨드 라인에서의 요청등 여러 유형을 포함할 수 있으며, isAJAX()isCLI() 메소드로 확인할 수 있습니다

// Check for AJAX request.
if ($request->isAJAX())
{
        . . .
}

// Check for CLI Request
if ($request->isCLI())
{
        . . .
}

getMethod() 메소드를 이용하여 요청중인 HTTP 메소드를 확인할 수 있습니다.

// Returns 'post'
$method = $request->getMethod();

이 메소드는 기본적으로 소문자(예 : ‘get’, ‘post’, 등)로 값을 반환합니다. 매개 변수로 true를 전달하여 대문자로 값을 얻을 수 있습니다

// Returns 'GET'
$method = $request->getMethod(true);

isSecure() 메서드를 이용하여 HTTPS 연결을 통해 요청이 이루어 졌는지 확인할 수 있습니다.

if (! $request->isSecure())
{
        force_https();
}

입력 검색

요청(Request) 객체를 통해 $_SERVER, $_GET, $_POST, $_ENV, $_SESSION에서 입력을 검색 할 수 있습니다. 데이터는 자동으로 필터링되지 않으며 요청에 전달 된대로 입력 데이터를 리턴합니다. 전역 변수($_POST[‘something’])를 직접 액세스하는 대신 이러한 메소드를 사용하는 것의 주된 장점은 항목이 존재하지 않으면 null을 리턴하고 데이터를 필터링할 수 있다는 것입니다. 다음과 같이 항목이 먼저 존재하는지 테스트하지 않고도 편리하게 데이터를 사용할 수 있습니다.

$something = isset($_POST['foo']) ? $_POST['foo'] : NULL;

CodeIgniter의 내장 메소드를 사용하면 간단히 수행 할 수 있습니다.

$something = $request->getVar('foo');

getVar() 메소드는 $_REQUEST에서 데이터를 가져 오므로 $_GET, $POST, $_COOKIE의 모든 데이터를 반환합니다. 이 방법이 편리하지만, 더욱 구체적인 방법을 사용해야 할 수도 있습니다:

  • $request->getGet()
  • $request->getPost()
  • $request->getServer()
  • $request->getCookie()

또한 $_GET 또는 $_POST 모두에서 정보를 검색하지만, 가져오는 순서를 제어하는 기능도 제공합니다.

  • $request->getPostGet() - checks $_POST first, then $_GET
  • $request->getGetPost() - checks $_GET first, then $_POST

JSON 데이터 가져오기

getJSON()을 사용하여 php://input의 내용을 JSON으로 가져올 수 있습니다.

Note

들어오는 데이터가 유효한 JSON인지 여부를 확인할 수있는 방법이 없으므로, JSON인 경우에만 이 메소드를 사용해야 합니다.

$json = $request->getJSON();

기본적으로 JSON 데이터의 모든 객체는 PHP 객체로 반환합니다. 연관 배열로 변환하려면 첫 번째 매개 변수로 true를 전달하십시오.

$json = $request->getJSON(true);

두 번째와 세 번째 매개 변수는 PHP 함수 json_decodedepth, options 매개 변수와 일치합니다.

원시(raw) 데이터 검색 (PUT, PATCH, DELETE)

마지막으로 getRawInput()을 사용하여 php://input의 내용을 원시(raw) 스트림으로 가져올 수 있습니다

$data = $request->getRawInput();

다음처럼 데이터를 검색하여 배열로 변환합니다.

var_dump($request->getRawInput());

[
        'Param1' => 'Value1',
        'Param2' => 'Value2'
]

입력 데이터 필터링

애플리케이션의 보안을 유지하려면 액세스하는 모든 입력을 필터링해야 합니다. 위에 설명된 메소드들의 마지막 매개 변수로 사용할 필터 유형을 전달할 수 있습니다. filter_var()네이티브(native) 함수가 필터링에 사용됩니다. 유효한 필터 유형 목록을 보려면 PHP 매뉴얼로 이동하십시오.

POST 변수를 필터링하면 다음과 같습니다

$email = $request->getVar('email', FILTER_SANITIZE_EMAIL);

Important

마지막 매개 변수로 전달된 필터 유형 지원은 위에서 언급한 모든 메소드중 getJSON()을 제외 합니다.

헤더 검색

getHeaders() 메서드로 요청과 함께 전송된 모든 헤더에 액세스 할 수 있습니다. 이 메소드는 키를 헤더 이름으로 사용하여 모든 헤더의 배열을 CodeIgniter\HTTP\Header로 반환합니다.

var_dump($request->getHeaders());

[
        'Host'          => CodeIgniter\HTTP\Header,
        'Cache-Control' => CodeIgniter\HTTP\Header,
        'Accept'        => CodeIgniter\HTTP\Header,
]

단일 헤더만 필요한 경우 getHeader() 메서드를 사용합니다. 지정된 헤더 객체가 존재하는 경우 대소문자를 구분하지 않는 방식으로 가져오고, 그렇지 않으면 null을 반환합니다.

// these are all equivalent
$host = $request->getHeader('host');
$host = $request->getHeader('Host');
$host = $request->getHeader('HOST');

hasHeader()를 사용하여 헤더가 있는지 확인할 수 있습니다.

if ($request->hasHeader('DNT'))
{
        // Don't track something...
}

헤더의 모든 값을 가진 문자열이 필요하다면 getHeaderLine() 메소드를 사용합니다.

// Accept-Encoding: gzip, deflate, sdch
echo 'Accept-Encoding: '.$request->getHeaderLine('accept-encoding');

이름과 값을 가진 전체 헤더 문자열이 필요하면 헤더를 문자열로 캐스트(cast)합니다.

echo (string)$header;

요청 URL

$request->uri 속성을 통해 요청에 대한 현재 URI를 나타내는 URI 객체를 검색할 수 있습니다. 이 객체를 문자열로 캐스트하여 현재 요청에 대한 전체 URL을 얻을 수 있습니다.

$uri = (string)$request->uri;

이 개체는 요청의 일부를 얻을 수 있는 모든 기능을 제공합니다.

$uri = $request->uri;

echo $uri->getScheme();         // http
echo $uri->getAuthority();      // snoopy:password@example.com:88
echo $uri->getUserInfo();       // snoopy:password
echo $uri->getHost();           // example.com
echo $uri->getPort();           // 88
echo $uri->getPath();           // /path/to/page
echo $uri->getQuery();          // foo=bar&bar=baz
echo $uri->getSegments();       // ['path', 'to', 'page']
echo $uri->getSegment(1);       // 'path'
echo $uri->getTotalSegments();  // 3

업로드(Upload) 파일

업로드된 모든 파일에 대한 정보는 $request->getFiles()를 통해 얻을 수 있으며, FileCollection 인스턴스를 반환합니다. 이를 통하여 파일 업로드 작업이 쉬워지고 보안 위험을 최소화할 수 있습니다.

$files = $request->getFiles();

// Grab the file by name given in HTML form
if ($files->hasFile('uploadedFile')
{
        $file = $files->getFile('uploadedfile');

        // Generate a new secure name
        $name = $file->getRandomName();

        // Move the file to it's new home
        $file->move('/path/to/dir', $name);

        echo $file->getSize('mb');      // 1.23
        echo $file->getExtension();     // jpg
        echo $file->getType();          // image/jpg
}

HTML 파일 입력에 지정된 파일 이름을 기반으로 업로드한 파일을 얻을 수 있습니다.

$file = $request->getFile('uploadedfile');

HTML 파일 입력에 제공된 파일 이름을 기반으로 동일한 이름으로 업로드된 다중 파일 배열 얻을 수 있습니다.

$files = $request->getFileMultiple('uploadedfile');

컨텐츠 협상

negotiate() 메소드를 통해 요청된 컨텐츠 유형을 쉽게 협상할 수 있습니다.

$language    = $request->negotiate('language', ['en-US', 'en-GB', 'fr', 'es-mx']);
$imageType   = $request->negotiate('media', ['image/png', 'image/jpg']);
$charset     = $request->negotiate('charset', ['UTF-8', 'UTF-16']);
$contentType = $request->negotiate('media', ['text/html', 'text/xml']);
$encoding    = $request->negotiate('encoding', ['gzip', 'compress']);

자세한 내용은 콘텐츠 협상 페이지를 참조하십시오.

Class Reference

Note

여기에 나열된 메소드 외에도 이 클래스는 요청(Request) Class메시지(Message) Class 클래스의 메소드를 상속합니다.

사용 가능한 부모(Parent) 클래스가 제공하는 메소드는 다음과 같습니다.:

  • CodeIgniter\HTTP\Request::getIPAddress()
  • CodeIgniter\HTTP\Request::validIP()
  • CodeIgniter\HTTP\Request::getMethod()
  • CodeIgniter\HTTP\Request::getServer()
  • CodeIgniter\HTTP\Message::body()
  • CodeIgniter\HTTP\Message::setBody()
  • CodeIgniter\HTTP\Message::populateHeaders()
  • CodeIgniter\HTTP\Message::headers()
  • CodeIgniter\HTTP\Message::header()
  • CodeIgniter\HTTP\Message::headerLine()
  • CodeIgniter\HTTP\Message::setHeader()
  • CodeIgniter\HTTP\Message::removeHeader()
  • CodeIgniter\HTTP\Message::appendHeader()
  • CodeIgniter\HTTP\Message::protocolVersion()
  • CodeIgniter\HTTP\Message::setProtocolVersion()
  • CodeIgniter\HTTP\Message::negotiateMedia()
  • CodeIgniter\HTTP\Message::negotiateCharset()
  • CodeIgniter\HTTP\Message::negotiateEncoding()
  • CodeIgniter\HTTP\Message::negotiateLanguage()
  • CodeIgniter\HTTP\Message::negotiateLanguage()
CodeIgniter\HTTP\IncomingRequest
isCLI()
Returns:커맨드 라인 요청 true, 그렇지 않으면 false
Return type:bool
isAJAX()
Returns:AJAX 요청 true, 그렇지 않으면 false
Return type:bool
isSecure()
Returns:HTTPS 요청 true, 그렇지 않으면 false
Return type:bool
getVar([$index = null[, $filter = null[, $flags = null]]])
Parameters:
  • $index (string) – 찾을 변수/키의 이름
  • $filter (int) – 적용할 필터 유형, 필터 목록은 여기에서 찾을 수 있습니다.
  • $flags (int) – 적용할 플래그, 플래그 목록은 여기에서 찾을 수 있습니다.
Returns:

제공된 매개 변수가 없는 경우 $_REQUEST, 있으면 검색된 REQUEST 값 또는 null

Return type:

mixed|null

첫 번째 매개 변수에는 찾고자하는 REQUEST 항목의 이름입니다

$request->getVar('some_data');

검색하려는 항목이 존재하지 않으면 이 메소드는 널(null)을 리턴합니다.

두 번째 선택적 매개 변수를 사용하면 PHP 필터를 통해 데이터를 필터링할 수 있습니다. 원하는 필터 유형을 두 번째 매개 변수로 전달하십시오.

$request->getVar('some_data', FILTER_SANITIZE_STRING);

모든 REQUEST 항목의 배열을 반환하려면 매개 변수없이 호출하십시오.

모든 REQUEST 항목을 반환하고 필터를 통해 전달하려면 첫 번째 매개 변수를 null로 설정하고 두 번째 매개 변수를 사용하려는 필터로 설정하십시오.

$request->getVar(null, FILTER_SANITIZE_STRING); // returns all POST items with string sanitation

여러 REQUEST 매개 변수의 배열을 반환하려면 필요한 모든 키를 배열로 전달하십시오.

$request->getVar(['field1', 'field2']);

매개 변수의 배열을 반환할 때 필터링을 사용하고 싶다면, 두 번째 매개 변수에 적용할 필터 유형을 설정하십시오.

$request->getVar(['field1', 'field2'], FILTER_SANITIZE_STRING);
getGet([$index = null[, $filter = null[, $flags = null]]])
Parameters:
  • $index (string) – 찾을 변수/키의 이름.
  • $filter (int) – 적용할 필터 유형, 필터 목록은 여기에서 찾을 수 있습니다.
  • $flags (int) – 적용할 플래그, 플래그 목록은 여기에서 찾을 수 있습니다.
Returns:

제공된 매개 변수가 없는 경우 $_GET, 있으면 검색된 GET 값 또는 null

Return type:

mixed|null

getVar()와 동일하지만, GET 데이터만 가져옵니다.

getPost([$index = null[, $filter = null[, $flags = null]]])
Parameters:
  • $index (string) – 찾을 변수/키의 이름
  • $filter (int) – 적용할 필터 유형, 필터 목록은 여기에서 찾을 수 있습니다.
  • $flags (int) – 적용할 플래그, 플래그 목록은 여기에서 찾을 수 있습니다.
Returns:

제공된 매개 변수가 없는 경우 $_POST, 있으면 검색된 POST 값 또는 null

Return type:

mixed|null

getVar()와 동일하지만, POST 데이터만 가져옵니다.

getPostGet([$index = null[, $filter = null[, $flags = null]]])
Parameters:
  • $index (string) – 찾을 변수/키의 이름
  • $filter (int) – 적용할 필터 유형, 필터 목록은 여기에서 찾을 수 있습니다.
  • $flags (int) – 적용할 플래그, 플래그 목록은 여기에서 찾을 수 있습니다.
Returns:

제공된 매개 변수가 없는 경우 $_POST, 있으면 검색된 POST 값 또는 null

Return type:

mixed|null

이 방법은 getPost(), getGet()와 거의 같은 방식으로 작용하며, 2개의 메소드를 결합한 것입니다. POST에서 먼저 검색하여 발견되지 않으면 GET에서 검색합니다.

$request->getPostGet('field1');
getGetPost([$index = null[, $filter = null[, $flags = null]]])
Parameters:
  • $index (string) – 찾을 변수/키의 이름
  • $filter (int) – 적용할 필터 유형, 필터 목록은 여기에서 찾을 수 있습니다.
  • $flags (int) – 적용할 플래그, 플래그 목록은 여기에서 찾을 수 있습니다.
Returns:

제공된 매개 변수가 없는 경우 $_POST, 있으면 검색된 POST 값 또는 null

Return type:

mixed|null

이 방법은 getPost(), getGet()와 거의 같은 방식으로 작용하며, 2개의 메소드를 결합한 것입니다. GET에서 먼저 검색하여 발견되지 않으면 POST에서 검색합니다.

$request->getGetPost('field1');
getCookie([$index = null[, $filter = null[, $flags = null]]])
Noindex:
Parameters:
  • $index (mixed) – COOKIE명
  • $filter (int) – 적용할 필터 유형, 필터 목록은 여기에서 찾을 수 있습니다.
  • $flags (int) – 적용할 플래그, 플래그 목록은 여기에서 찾을 수 있습니다.
Returns:

제공된 매개 변수가 없는 경우 $_COOKIE, 있으면 검색된 COOKIE 값 또는 null

Return type:

mixed

getPost()getGet()과 동일하지만 값을 쿠키(cookie)에서 가져옵니다.

$request->getCookie('some_cookie');
$request->getCookie('some_cookie', FILTER_SANITIZE_STRING); // with filter

여러 쿠키 값의 배열을 반환하려면 필요한 모든 키를 배열로 전달하십시오.

$request->getCookie(['some_cookie', 'some_cookie2']);

Note

Cookie Helper 함수 get_cookie()와 달리 이 메소드는 $config['cookie_prefix']의 값이 앞에 추가되지 않습니다.

getServer([$index = null[, $filter = null[, $flags = null]]])
Parameters:
  • $index (mixed) – Value name
  • $filter (int) – 적용할 필터 유형, 필터 목록은 여기에서 찾을 수 있습니다.
  • $flags (int) – 적용할 플래그, 플래그 목록은 여기에서 찾을 수 있습니다.
Returns:

검색된 $_SERVER 값 또는 null

Return type:

mixed

getPost(), getGet(), getCookie() 메소드와 동일하지만 값을 $_SERVER에서 가져옵니다.

$request->getServer('some_data');

다수의 $_SERVER 값을 배열로 반환하려면, 필요한 모든 키를 배열로 전달하십시오.

$request->getServer(['SERVER_PROTOCOL', 'REQUEST_URI']);
getUserAgent([$filter = null])
Parameters:
  • $filter (int) – 적용할 필터 유형, 필터 목록은 여기에서 찾을 수 있습니다.
Returns:

SERVER 데이터에서 찾은 사용자 에이전트 문자열 또는 null

Return type:

mixed

이 메소드는 SERVER 데이터에서 사용자 에이전트(User Agent) 문자열을 리턴합니다.

$request->getUserAgent();