Получите помощь, поддержку и профессиональное общение в Клубе CodeIgniter

# CodeIgniter User Guide Version 2.1.3

Search User Guide

# Класс Input (ввод)

Класс Input выполняет две задачи:

1. Препроцессинг глобальных данных ввода в целях безопасности;
2. Предоставляет некоторые функции-помощники для получения данных ввода и их препроцессинга.

Примечание: Этот класс инициализируется системой автоматически, поэтому нет нужды делать это вручную.

## Фильтрация безопасности

Функция фильтрации безопасности вызывается автоматически при загрузке нового контроллера. Она делает следующее:

- Если параметр $config['allow_get_array'] установлен в FALSE (по умолчанию TRUE), уничтожает глобальный массив GET.
- Удаляет все глобальные переменные в случае, если включено register_globals.
- Фильтрует массивы GET/POST/COOKIE, допуская только алфавитно-числовые (и некоторые другие) символы.
- Предоставляет XSS-фильтрацию (Cross-site Scripting Hacks). Эта опция может быть включена глобально, или только на один запрос.
- Стандартизирует окончания строк в \n (в Windows \r\n)

## XSS-фильтрация

Класс Input имеет способность автоматически фильтровать данные с ввода для предотвращения XSS-атак. Если вы хотите, чтобы фильтр запускался автоматически при каждом запросе, откройте ваш файл `application/config/config.php` и установите следующее:

`$config['global_xss_filtering'] = TRUE;`

Пожалуйста посмотрите документацию класса Security для получения дополнительной информации об использовании XSS-фильтрации в вашем приложении.

## Использование данных POST, COOKIE и SERVER

CodeIgniter имеет три функции-помощника, которые позволяют вам получать данные POST, COOKIE и SERVER. Основное преимущество использования функций, вместо того, чтобы получать данные напрямую ($_POST['parameter']) состоит в том, что функции проверяют их существование, и в соответствии с этим возвращают FALSE или данные. Это позволяет вам более удобно использовать данные без ручной проверки их существования. Другими словами, обычно вы можете делать так:

`if ( ! isset($_POST['something']))
{
$something = FALSE;
}
else
{
$something = $_POST['something'];
}`

Со встроенными функциями CodeIgniter вы можете делать просто так:

`$something = $this->input->post('something');`

Эти три функции:

- $this->input->post()
- $this->input->cookie()
- $this->input->server()

## $this->input->post()

Первый параметр содержит имя элемента POST, который вы хотите получить:

`$this->input->post('some_data');`

Функция возвращает FALSE, если указанный элемент не существует.

Второй опциональный параметр позволяет вам пропускать данные через фильтр XSS. Эта опция включается установкой второго параметра в булево TRUE.

`$this->input->post('some_data', TRUE);`

Чтобы получить массив всех элементов POST, вызовите эту функцию без параметров.

Чтобы получить все элементы POST и пропустить их через фильтр XSS, установите первый параметр в NULL и второй параметр в TRUE.

Эта функция вернет булево FALSE, если массив POST пустой.

`$this->input->post(NULL, TRUE); // возвращает все элементы POST, пропустив их через фильтр XSS
$this->input->post(); // возвращает все элементы POST без XSS-фильтрации`

## $this->input->get()

Эта функция идентична функции выше, только она отдает данные GET:

`$this->input->get('some_data', TRUE);`

Чтобы получить массив всех элементов GET, вызовите эту функцию без параметров.

Чтобы получить все элементы GET и пропустить их через фильтр XSS, установите первый параметр в NULL и второй параметр в TRUE.

Эта функция вернет булево FALSE, если массив GET пустой.

`$this->input->get(NULL, TRUE); // вернет все элементы GET, пропустив их через фильтр XSS
$this->input->get(); // вернет все элементы GET без XSS-фильтрации`

## $this->input->get_post()

Эта функция вернет оба потока данных, из GET и из POST. Сперва будет смотреть POST, потом GET:

`$this->input->get_post('some_data', TRUE);`

## $this->input->cookie()

Эта функция идентична функции POST, только она будет получать данные Cookie:

`$this->input->cookie('some_data', TRUE);`

## $this->input->server()

Эта фунция идентична функциям выше, только она получает серверные данные:

`$this->input->server('some_data');`

## $this->input->set_cookie()

Устанавливает куки, содержащие указанные значения. Есть два способа передать информацию в эту функцию, чтобы установить куки: массивом и раздельно указав параметры:

#### Использование массива

Используя этот метод, передайте ассоциативный массив в первом параметре:

`$cookie = array(
'name' => 'The Cookie Name',
'value' => 'The Value',
'expire' => '86500',
'domain' => '.some-domain.com',
'path' => '/',
'prefix' => 'myprefix_',
'secure' => TRUE
);
$this->input->set_cookie($cookie);`

Примечания:

Требуются только имя и значение. Чтобы удалить куку, оставьте время истечения пустым.

Время истечения устанавливается в секундах, которые будут добавлены к текущему времени. Не включайте время, только количество секунду от текущего момента, которые кука должна быть валидной. Если время истечения установить в ноль, кука будет действительна только пока открыт браузер.

Для межсайтовых кук, несмотря на то, с какого сайта вы их запрашиваете, добавьте ваш URL, начинающийся с точки в domain: .your-domain.com

Путь, как правило, можно не указывать, так как функция сама устанавливает корневой путь.

Префикс требуется только для того, чтобы предотвратить конфликты имен с другими идентичными именами кук на вашем сервере.

Установите параметр secure в TRUE, чтобы сделать безопасную куку.

#### Раздельно переданные параметры

Если вы предпочитаете, можете установить куки, передав данные в функцию отдельными параметрами:

`$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);`

## $this->input->cookie()

Позволяет вам получить куки. Первый параметр содержит только имя куки, которую вы ищете (включая любые префиксы):

`cookie('some_cookie');`

Функция вернет FALSE, если элемент, который вы хотите получить, не доступен.

Второй опциональный параметр позволит вам пропустить данные через фильтр XSS. Он включается установкой значения в TRUE.

`cookie('some_cookie', TRUE);`

## $this->input->ip_address()

Вернет IP-адрес текущего пользователя. Если IP-адрес неправильный, функция вернет 0.0.0.0

`echo $this->input->ip_address();`

## $this->input->valid_ip($ip)

Принимает IP-адрес на вход, и возвращает TRUE или FALSE, если он правильный или нет. Принимает опциональный второй строковый параметр "IPv4" или "IPv6" для указания формата IP-адреса. По умолчанию происходит проверка обоих форматов. Примечание: функция $this->input->ip_address(), описанная выше, самостоятельно проверяет правильность IP.

`if ( ! $this->input->valid_ip($ip))
{
echo 'Not Valid';
}
else
{
echo 'Valid';
}`

## $this->input->user_agent()

Возвращает данные User Agent (веб-браузер) текущего пользователя. Возвращает FALSE, если данные не доступны.

`echo $this->input->user_agent();`

Смотрите также методы класса User Agent, которые позволяют извлечь информацию их строки User Agent.

## $this->input->request_headers()

Полезно при запуске в не-Апач окружении, где apache_request_headers() могут не поддерживаться. Функция возвращает массив заголовков.

`$headers = $this->input->request_headers();`

## $this->input->get_request_header();

Возвращает один элемент из массива заголовков запроса.

`$this->input->get_request_header('some-header', TRUE);`

## $this->input->is_ajax_request()

Проверяет серверный заголовок HTTP_X_REQUESTED_WITH, и возвращает TRUE или FALSE.

## $this->input->is_cli_request()

Проверяет установленную константу STDIN, которая дает понять, что PHP вызван из командной строки.

`$this->input->is_cli_request()`

### Поделиться

Переведено в компании Аринт.

# Спасибо!

Вы тоже можете оказать помощь проекту! Как это сделать?

## Помощь и поддержка

Вы можете задать вопросы и получить ответы и советы от гуру CodeIgniter и веб-разработки: вступайте в Клуб CodeIgniter