<MyRusakov.ru />

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

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

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

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

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

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

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

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

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

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

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

Введение в PHP Потоки. Метаданные и фильтры потока

Введение в PHP Потоки. Метаданные и фильтры потока

В предыдущей статье мы узнали, что такое потоки ввода/вывода и контексты потоков в PHP, рассмотрели примеры их использования. А в этой статье мы рассмотрим, какие дополнительные данные мы сможем получить при выполнении запроса с помощью потоковых функций, также какие фильтры потоков мы можем использовать и рассмотрим примеры обработчиков потоков.

Если Вы тестировали работоспособность последнего примера, то он должен был бы распечатать содержимое главной страницы сайта example.ru, не выводя при этом http-заголовки. А заголовки ответа сервера зачастую имеют важное значение, и поэтому они считаются частью метаданных.

Пример с использованием метода GET:

<?php

  $opts = [
    'http' => [
    'method' => "GET",
    'header' => "Accept-language: en \r\n".
       "Cookie: foo = bar \r\n"
    ]
  ];

  $context = stream_context_create($opts);

  $fp = fopen("http://example.ru/", "rb", false, $context);
  echo stream_get_contents($fp);

  // получаем метаданные и выводим
  print_r(stream_get_meta_data($fp));

?>

Пример с POST:

<?php

// данные POST запроса
  $postdata = [
    'price' => 50,
    'brand' => 'NNN'
  ];

  $opts = [ 'http' => [
    // метод запроса
    'method' => 'POST',

  // тип содержимого
    'header' => 'Content-type: application/x-www-form-urlencoded',

  // само содержимое
    'content' => http_build_query($postdata, '', '&'),

  // время ожидания скриптом отклика
    'timeout' => 5,
  ]
 ];

  // создаем контекст из настроек
  $context = stream_context_create($opts);

  // открываем соединение
  $fp = fopen ("http://example.ru/", "rb", false, $ context);

  // получаем содержимое страницы
  echo stream_get_contents($fp);

  // получаем метаданные, заголовки ответа сервера
  print_r(stream_get_meta_data($fp));

?>

Здесь мы используем функцию stream_get_contents() для того, чтобы вывести содержимое ресурса $fp. Затем, чтобы получить метаданные этого запроса, мы используем stream_get_meta_data(), передав ему в аргументе указатель на ресурс $fp.

Результат выполнения скрипта будет примерно следующий:

<?php

// это данные из массива $_POST
Array
(
  [price] => 50
  [brand] => NNN
)

// это заголовки ответа сервера - метаданные потока (stream metadata)
Array
(
  [timed_out] =>
  [blocked] => 1
  [eof] => 1
  [wrapper_data] => Array
   (
    [0] => HTTP/1.0 200 OK
    [1] => Host: example.ru
    [2] => Connection: close
    [3] => X-Powered-By: PHP/5.5.9
    [5] => Content-type: text/plain;charset=UTF-8
   )

  [wrapper_type] => http
  [stream_type] => tcp_socket/ssl
  [mode] => rb
  [unread_bytes] => 0
  [seekable] =>
  [uri] => http://example.ru/
  )

?>

Фильтры потока

У потоков (php stream) в PHP есть дополнительный набор функций - фильтры потоков. С их помощью можно менять данные "налету", во время чтения и записи данных. Функции stream_filter_append() и stream_filter_prepend() присоединяют фильтр к потоку либо перед операцией, либо после. Для примера рассмотрим использование функции шифрования str_rot13() в качестве функции фильтра.

<?php

  $opts = [ 'http' => [
      'method' => "GET",
      'header' => "Accept-language: en\r\n".
        "Cookie: foo=bar\r\n"
      ]
  ];

  $context = stream_context_create($opts);

  // открываем соединение
  $fp = fopen ("http://example.ru/", "rb", false, $context);

  // применяем фильтр
  stream_filter_append($fp, "string.rot13", STREAM_FILTER_READ);

  // выводим результат
  echo stream_get_contents($fp);

?>

Результат будет примерно следующий:

<!QBPGLCR ugzy>... // и так далее

В PHP существуют встроенные фильтры как для простых преобразований так и для кодирования и декодирования, сжатия и даже шифрования, как в примере выше. Список доступных фильтров приведен в официальном руководстве по следующему адресу PHP Streams.

Примеры использования обработчиков:

<?php

  // Чтение локального файла
  $localfile = file_get_contents("C:/Files/story.txt");

  // С явным заданием схемы FILE
  $localfile = file_get_contents("file://C:/Files/story.txt");

  // Чтение удаленного файла по адресу example.ru, используя HTTP
  $httpfile = file_get_contents("http://example.ru");

  // Чтение удаленного файла по адресу example.ru, используя HTTPS
  $httpsfile = file_get_contents("https://example.ru/file.txt");

  // Чтение удаленного файла по адресу ftp.example.ru, используя FTP
  $ftpfile = file_get_contents("ftp://user:pass@ftp.example.ru/file.txt");

  // Чтение удаленного файла по адресу ftp.example.ru, используя FTPS
  $ftpsfile = file_get_contents("ftps://user:pass@ftp.example.ru/file.txt");

?>

Запись данных в сжатый файл:

<?php

  /* Создаем сжатый файл с различными данными
  * Файл можно прочитать с помощью потока compress.zlib либо
  * просто разархивировать
  */

  $fd = fopen("compress.zlib://secret.gz", "wb");
  if (!$fd) exit("Файл не может быть создан.");

  fwrite($fd, "MyruSakov.Ru\n");
  fclose($fd);

?>

Строго говоря, существующих обработчиков потоков данных вполне достаточно для выполнения 99% повседневных задач, да к тому же существует масса готовых решений, которые могут избавить Вас от необходимости реализации собственных обработчиков потоков ввода/вывода в PHP. Поэтому потоки (stream) в PHP - это мощный и далеко не тривиальный инструмент, для овладения которым необходима определённая сноровка.

Спасибо за внимание и всего доброго!

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

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

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

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

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

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

  1. Кнопка:

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

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

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

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

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

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