<MyRusakov.ru />

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Фреймворк Yii 2.0 с нуля. Пример создания сайта

Видеокурс "Фреймворк Yii 2.0 с нуля. Пример создания сайта" обучит Вас созданию профессиональных сайтов с использованием фреймворка Yii. В курсе есть 2 раздела: теоретический и практический. В теоретическом разделе будут разобраны возможности фреймворка Yii с примерами их использования, а в практической части будет создан сайт Blog.MyRusakov.ru с помощью полученных знаний из теоретического раздела.

Так же почти ко всем урокам идут упражнения для закрепления материала из урока на практике.

После прохождения курса Вы без труда сможете создавать любые сайты с использованием фреймворка Yii, причём делать это будете быстро и качественно.

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

Рекурсия в PHP

Рекурсия в PHP

Что-то такое рекурсия, многие из Вас знают. Но, на всякий случай, рекурсия - это вызов функции внутри самой себя. Однако, это определение все знают, но вот с пониманием возникают неясности. Я решил в этой статье разобрать рекурсию в PHP на достаточно простом и реальном примере из практики.

Не секрет, что все данные (за редким исключением), приходящие из форм, надо пропускать через функцию htmlspecialchars(), дабы избежать XSS. И я думаю, что Вы знаете, что некоторые входные данные являются массивами (например, при той же загрузке файлов). И наша с Вами задача написать такую функцию, которая принимает массив всех входящих данных, а также учесть, что среди этих данных есть также массивы, внутри которых также могут быть массивы и так далее.

Привожу код функции:

<?php
  function xss($data) {
    if (is_array($data)) { // Если это массив
      $result = array(); // Создаём новый массив
      foreach ($data as $key => $value) { // Перебираем исходный массив
        $result[$key] = xss($value); // Рекурсивно вызываем функцию xss
      }
      return $result; // Возвращаемый "защищённый" массив
    }
    return htmlspecialchars($data, ENT_QUOTES); // Если это не массив, то вызываем htmlspecialchars()
  }
  $data = xss($_REQUEST); // Пример вызова функции
?>

Ключевым моментом здесь является, что внутренних массивов внутри входящего $data может быть очень много, поэтому без рекурсии в PHP здесь не обойтись. А сам алгоритм простой:

  1. Если входящие данные - это НЕ массив, то просто вызываем функцию htmlspecialchars().
  2. Если входящие данные - это массив, то перебираем все элементы массива и для каждого вызываем эту же функцию. А дальше возвращаемся к пункту 1.

Я понимаю, что для новичков рекурсия в PHP - это достаточно сложная вещь, но я рекомендую прямо пройтись по коду, как будто Вы интерпритатор PHP. Тогда станет всё яснее.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (6):

malina95 malina95 07.11.2012 22:00:41

А зачем нужен глобальный массив $_REQUEST ? Что-то то я не могу понять

Ответить

cyber93 cyber93 07.11.2012 22:56:31

Владислав, для того чтобы хранить переменные, которые Вы передаете через HTTP запрос. Например данные из формы методом POST или GET значения после знака "?" в url или когда получаете куки в заголовках. POST, GET, COOKIE данные хранятся в глобальном массиве $_REQUEST.

Ответить

malina95 malina95 07.11.2012 23:24:33

Я это знаю, но я читал что таое не безопасно делать в любых функциях

Ответить

Admin Admin 08.11.2012 04:45:38

$_REQUEST здесь просто как пример. В нём хранится очень много данных, о которых Максим написал выше, и можно всё обезопасить. На практике же вызывается данная функция для $_POST, для $_GET иля для $_FILES. А иногда действительно используется $_REQUEST, ничего опасного в этом нет. Данный массив столько же опасен, сколько, например, и $_GET.

Ответить

malina95 malina95 08.11.2012 14:18:23

Я так и думал, но просто я однажды переводил один английский сайт(ссылку не помню) и там было написано что в функциях лучше не выводить никакие глобальные массивы как гет или пост, потому что незначительно падает скорость и безопасность... Значит всё таки неправду пишут :)

Ответить

Олег Олег 20.09.2013 22:10:32

Здравствуй Михаил! Вот рекурсия с "htmlspecialchars" из твоих уроков. Я попробовал проверить работу рекурсии двумерным массивом. Почему то у меня не в одном браузере функция "htmlspecialchars" в рекурсии с двумерным массивом не срабатывает! Я что то делаю не правильно? function secureData($data) { foreach ($data as $key => $value) { if (is_array($value)) secureData($value); else $data[$key] = htmlspecialchars($value); } return $data; } print_r (secureData($data));

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.