Хелперы File, UTF8 и Security

Комментарии: 4  Просмотры: 9 413

В этом уроке мы рассмотрим сразу три Хелпера: File, UTF8 и Security. Начнем по порядку.

Класс File
Если на вашем ресурсе происходит работа с файлами (допустим это какой-то файловый архив), то данный класс просто незаменим. И его первый метод, под названием mime, позволяет определить MIME-тип файла. Правда в комментарии к методу написано, что он является ненадежным, так как само определение MIME-типов в php (а фреймворк, как вы помните, написан на php) является ненадежным. Короче говоря используйте на свой страх и риск. Пользоваться очень просто:

$mime = File::mime($file);

На файл с расширением «zip» действительно выдало application/x-zip. Проверил еще пару файлов, тоже нормально определило.
Следующий метод данного класса — метод split позволяет «нарезать» файлы на части. Например, при загрузке пользователем большого файла может быть полезно разбить его на несколько более мелких для более удобного скачивания (думаю, видели на ресурсах типа депозита). Принимает в качестве параметров путь к файлу и размер части в мегабайтах (Необязательный параметр. По умолчанию размер части равен 10 мегабайт). Возвращает количество полученных частей:

$count = File::split($file, 0.05);

Из архивного файла вида kohana.zip получаются файлы вида kohana.zip.001, kohana.zip.002, kohana.zip.003 итд, так что зная название исходного файла и количество частей вы можете сами сгенерировать расширения для всех файлов.
Ну и метод, собирающий из частей обратно цельный файл называется join. Используется аналогично, только принимает уже один параметр:

$count = File::join($file);

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

Класс UTF8
Совершенно незаменимый класс, если вы работаете со строками в кодировке UTF8. Как вы наверное знаете, в php нельзя использовать стандартные строковые функции для обработки строк (с русским текстом) в этой кодировке. Это такие функции как strlen, strpos, substr и другие. В Кохане есть решение этой проблемы, специальный класс, который так и называется UTF8, причем его методы имеют названия, идентичные строковым функциям php. Нужно просто использовать статический вызов таких методов из этого класса.
Допустим нужно получить из строки подстроку. Используя такой код:

$rest = substr("арбуз", 1);

Мы получим непечатный первый символ. Все, что нужно сделать — это поставить перед названием функции UTF8::, функция станет методом и все получится:

$rest = UTF8::substr("арбуз", 1);  // возвращает "рбуз"

И еще один пример — преобразование к верхнему регистру:

$rest = UTF8::strtoupper("арбуз"); // возвращает "АРБУЗ"

С этим, думаю, все ясно.

Класс Security
Класс безопасности, который рекомендуется использовать при получении данных от пользователя (отзывы, комментарии, заполненная анкета итд). Первый метод — метод token нужен для защиты от так называемого CSRF (Сross Site Request Forgery или «Подделка межсайтовых запросов»). Если открыть Википедию, то там написано, что это — «вид атак на посетителей веб-сайтов, использующий недостатки протокола HTTP. Если жертва заходит на сайт, созданный злоумышленником, от её лица тайно отправляется запрос на другой сервер (например, на сервер платёжной системы), осуществляющий некую вредоносную операцию (например, перевод денег на счёт злоумышленника). Для осуществления данной атаки, жертва должна быть авторизована на том сервере, на который отправляется запрос, и этот запрос не должен требовать какого-либо подтверждения со стороны пользователя, который не может быть проигнорирован или подделан атакующим скриптом.»
Сам я этим методом никогда не пользовался, но написано, что хоть он и прост, но весьма эффективен. Все, что нужно сделать — вставить в форму специальное скрытое поле:

echo Form::hidden('csrf', Security::token());

И потом при валидации осуществить его проверку:

$array->rules('csrf', array(
    'not_empty'       => NULL,
    'Security::check' => NULL,
));

Следующий метод — метод strip_image_tags позволяет удалить теги изображения из строки:

$str = '<img src="kohana.jpg" />';
$str = Security::strip_image_tags($str); // вернется "kohana.jpg"

И последний метод — метод encode_php_tags кодирует php-теги в строку, т.е. превращает их в специальные символы.

$str = '<?php echo "hello, world!"; ?>';
$str = Security::encode_php_tags($str);

При выводе в браузер вроде ничего и не поменялось, но если посмотреть html-код страницы, то мы увидим, что строка выглядит следующим образом:

&lt;?php echo "hello, world!"; ?&gt;

На этом все. Наше изучение Хелперов практически закончено. Думаю следующий урок будет последним, посвященным Хелперам и мы приступим к какой-то новой теме.

<< Назад | Вперед >> | Обсудить на форуме


К записи оставлено 4 коммент.

респект тебе ))))))

join из какой папки пытается склеить файлы?

Ну по идее $file — это и есть путь к файлу.

нехватает «Версии для печати» на сайте, добавьте стили если не сложно, с листа удобней читать



Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.