<MyRusakov.ru />

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

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

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

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

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

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

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

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

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

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

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

Подключение в PHP сторонних файлов

Подключение в PHP сторонних файлов

Очень часто бывает необходимость разбить одну большую программу на несколько файлов. Также бывает такое, что необходимо подключить скрипт другого разработчика к своей программе. И вот как раз о подключении в PHP сторонних файлов я и расскажу в этой статье.

Давайте для начала создадим файл "a.php", в котором напишем такие строки:

<?php
  echo "Это работа скрипта в файле a.php";
?>

Теперь давайте создадим ещё один файл (например, "b.php") и подключим в нём скрипт "a.php":

<?php
  require "a.php";
  echo "Это работа скрипта в файле b.php";
?>

Как Вы догадались, подключение стороннего файла в PHP осуществляется с помощью конструкции require. Если выражаться простым языком, то эта конструкция просто копирует весь код из "a.php" и вставляет в "b.php". Очень важный нюанс: путь к файлу должен быть написан верно, причём старайтесь писать относительный путь, а не абсолютный, так как написание абсолютных путей в конструкции require часто отключено в настройках PHP, в целях безопасности. Также Вы можете подключать не только PHP-файлы, но и любые другие. Например, часто подключаются HTML-файлы. В своё время, когда я делал один сайт, я чтобы не копировать определённые повторяющиеся вещи (например, меню, счётчики, копирайты и прочее), я запихнул их HTML-код в отдельный файл. А потом на каждой странице просто подключал эти файлы. В результате, чтобы внести изменение, например, в меню, мне достаточно было исправить один подключаемый файл, и сразу после этого весь сайт преображался. Так что эта конструкция крайне полезна, и, как минимум, экономит тучу времени.

Однако, очень важный момент. Как избежать такой проблемы: допустим два разработчика делают одну большую программу. Первый разработчик нашёл готовый вариант выполнения части своей задачи, и подключил его с помощью require. Второй разработчик так же нашёл абсолютно то же самое готовое решение для уже своей задачи, и так же с помощью require подключил скрипт. Затем когда оба разработчика соединят свои части в единое целое, появятся ошибки. Почему? А всё потому, что они один и тот же скрипт подключили два раза. Давайте посмотрим на простой пример:

<?php
  require "a.php";
  require "b.php";
  echo "Это работа скрипта в файле c.php";
?>

Если Вы запустите данный скрипт, то обнаружите, что файл "a.php" подключался два раза, однако, мы же вызывали его всего один раз. Почему так вышло? А потому, что в файле "b.php" он также подключается. Вот такая проблема получается. И решается она очень просто: с помощью конструкции require_once. Она делает всё тоже самое, но если файл уже был подключен в этом скрипте, то подключать его не будет. Давайте исправим файл "b.php":

<?php
  require_once "a.php";
  echo "Это работа скрипта в файле b.php";
?>

Теперь, если мы запустим скрипт "c.php", то увидим, что файл "a.php" запустился как и положено всего один раз. Лично я Вам советую всегда использовать конструкцию require_once, если конечно Вам не нужно вставлять одно и то же по несколько раз (такое тоже иногда бывает нужно). Таким образом, Вы избежите лишних ошибок.

И, напоследок, хочется рассказать ещё о двух похожих конструкциях, с помощью которых тоже можно подключить в PHP сторонние файлы - это include и include_once. Они полностью аналогичны выше рассмотренным, но есть одно небольшое отличие. В случае конструкций require и require_once, если подключаемый файл не будет обнаружен, то выполнение скрипта прервётся. А при использовании include или include_once просто выведется предупреждение, и скрипт продолжит выполняться. Вот и вся разница. Советую даже проверить и убедиться уже в этом самостоятельно.

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

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

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

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

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

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

  1. Кнопка:

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

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

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

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

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

sync.o sync.o 21.07.2011 16:58:36

а как быть, если при вызове require_once 'file.php' выдает: Failed opening required 'file.php' (include_path='.:/usr/local/pear')?

Ответить

Admin Admin 21.07.2011 17:35:46

В этом случае надо указывать полный физический путь через использование $_SERVER['DOCUMENT_ROOT'];

Ответить

sync.o sync.o 21.07.2011 17:50:43

Спасибо, получилось. Я уже и с set_include_path намучился, ругал хостера... А оказалось просто буквы в имени файла перепутал...)

Ответить

Ustinochka Ustinochka 13.08.2014 11:19:19

А почему вы не затрагиваете проблемы безопасности? Вы рассказываете о всяких функциях и новички не понимая общей картины могут убить сайт. К примеру есть уязвимость которая называется PHP injection. Если написать: require($_GET['page']); это может привести к инъекции. Например если запущен скрипт index.php?page=home.php, то запуск скрипта с в таком виде index.php?page=index.php может вызвать бесконечную рекурсию. А в худшем случае можно заразить сайт вредоносным кодом. Пример сайта уязвимого к рекурсии http://www.bbcasaformica.com/index.php?page=index.php

Ответить

Alnik-75 Alnik-75 12.05.2012 02:34:49

а все же что лучше использовать require_once или include_once?

Ответить

Admin Admin 12.05.2012 13:08:33

Разницу посмотрите в статье, поэтому всё зависит от ситуации, но обычно лучше использовать require_once.

Ответить

Alnik-75 Alnik-75 12.05.2012 18:20:37

вашу статью и другие статьи я то читал, но вот почему то не могу уловить это решающее преимущество. Насколько я понял, обычные блоки в виде хэдера, футера и еже с ними все таки лучше подключать с помощью include. его же лучше использовать при наличии циклов. Меня больше интересует ситуация, когда необходимо подключить конфигурационный файл, содержащий соединение с БД. я подключаю его с помощью простого include. Что может трагичного случиться, если вдруг окажется, что это файл дважды был подключен к странице и, соответственно, дважды имело место соединение с БД? Я вчера специально проводил следующий экперимент. В мною разрабатываемом проекте есть формы создания объявлений. Соответственно, они начинаются с выбора региона, а также рубрик и разделов объявлений. В зависимости от выбранной рубрики с использованием jquery, ajax и php подключаются соответствующие файлы, например, продажа домов, покупка авто, содержащие формы, индивидуальные для этих рубрик. ситуация такая:выбрал рубрику-появилась соотвествующая форма объявлений. Если понескольку раз перевыбирать рубрики, то с течением времени повляются "тормоза". Так вот, если использовать require_once, то они появляются чуть раньше, чем при include_once или include. С чем то может быть связано?

Ответить

Admin Admin 12.05.2012 18:22:23

Видимо, Вы не понимаете разницу. Напишите разницу между include_once и require_once.

Ответить

Alnik-75 Alnik-75 12.05.2012 18:24:40

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

Ответить

Alnik-75 Alnik-75 12.05.2012 18:30:01

я не прав?

Ответить

Admin Admin 12.05.2012 18:50:14

Абсолютно нет, даже близко и вообще не в ту степь. Читайте ещё раз данную статью.

Ответить

Alnik-75 Alnik-75 12.05.2012 19:09:29

Вы имеете в виду реакцию на ошибку?

Ответить

Admin Admin 12.05.2012 19:41:17

Вы напишите разницу, а когда её осознаете, то поймёте, насколько абсурдны Ваши утверждения про цикл и прочее.

Ответить

Alnik-75 Alnik-75 12.05.2012 19:43:09

Я так понимаю, помочь осознать это Вы не желаете?

Ответить

Admin Admin 12.05.2012 19:45:22

Всё написано в статье, написать проще я не могу.

Ответить

Alnik-75 Alnik-75 12.05.2012 19:51:53

в ней можно было просто вставить вместо require include и начинающий программист, как я,так и не понял бы принципиальной разницы, кроме той, что require_once прерывает работу скрипта, а include_once нет. Я же обратился к вам с просьбой о разъяснении....

Ответить

Admin Admin 12.05.2012 20:09:32

А других отличий и нет и никогда не было. Поэтому все эти циклы, какие-то рекомендации - всё это бред. include не прерывает, а require прерывает, всё больше ничего нет.

Ответить

Alnik-75 Alnik-75 12.05.2012 20:10:42

Это я и подозревал. Почему то для меня всегда важно мнение

Ответить

GoTo GoTo 13.07.2012 07:56:39

Михаил, в своей статье Вы пишите, что, верстая один сайт, запихнули HTML код в отдельный файл, а потом вставляли в нужное место с помощью конструкций require и include. А на сайте myrusakov.ru разве не таким способом подключаются повторяющиеся блоки? И если не таким, то как Вы подключаете повторяющийся контент?

Ответить

Admin Admin 13.07.2012 13:37:54

Да, таким.

Ответить

malina95 malina95 21.07.2012 00:52:46

А можно вопрос не совсем по теме? Можно ли шаблон для джумлы переделать под шаблон для сайта с нуля? Я пытался но уменя всё сразу ломается!!!???

Ответить

Admin Admin 21.07.2012 12:02:56

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

Ответить

malina95 malina95 21.07.2012 17:12:44

Спасибо! А можете сказать в каком файле изначально надо искать?

Ответить

Admin Admin 21.07.2012 21:47:26

Зависит от конкретного шаблона.

Ответить

malina95 malina95 21.07.2012 23:53:10

Ок...А вы мне скажете где искать если вам дам ссылку на шаблон? Очень прошу!!! Я просто первый раз начал заниматься ЦМС и хочется первым делом разобраться в строении шаблона Помогите плииз... http://www.1joomla.ru/ice-themes/322-it-sporty-2.html

Ответить

Admin Admin 22.07.2012 23:01:13

Вот и будет для Вас хорошей практикой. Начните с css, посмотрите через firebug почему элементы отображаются не так, как надо.

Ответить

torpedko torpedko 13.04.2013 18:28:28

Михаил, у меня при присоеденении файла перед текстом и вообще кодом выводятся символы:"п»ї". в чем может быть проблема и как ее решить?

Ответить

Admin Admin 13.04.2013 21:15:11

Используйте кодировку UTF-8 без BOM.

Ответить

torpedko torpedko 13.04.2013 21:55:20

Михаил, а можно по подробней? пожалуйста

Ответить

Admin Admin 14.04.2013 11:44:13

http://myrusakov.ru/html-change-encoding.html

Ответить

wikim@bk.ru wikim@bk.ru 14.06.2013 19:50:24

Здравствуйте Михаил. В данной статье вы подключали a.php к b.php. А можно ли сделать наоборот - в конце a.php подключить b.php?

Ответить

Admin Admin 14.06.2013 21:24:51

Можно.

Ответить

sergkosm sergkosm 05.07.2013 00:16:39

Очень напоминает подключение css

Ответить

Morterset Morterset 04.10.2013 13:05:46

Михаил вы не подскажете как реализовать подключение PHP файла с другого сервера. Задача состоит в том что нужно подключить файл с сервера, и передать ему данные для записи в БД. Я пытался сделать так (require_once "http://launcher-ogc.zz.mu/podcl.php";)Но думаю это не правильно. Программа пишется на DevelStudio 3.0 Буду признателен если откликнитесь и поможете советом.

Ответить

Admin Admin 04.10.2013 13:10:54

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

Ответить

Morterset Morterset 04.10.2013 13:13:18

Спасибо

Ответить

lexrast lexrast 07.02.2014 18:22:26

Михаил, почему не работает функция include? Вот рабочий пример: <?php include 'helloworld.php'; ?> А вот этот почему-то не рабочий <?php include '../helloworld.php'; ?> Разумеется перемещаю файл helloworld.php в директорию на 1 выше той, в которой находится основной файл. Скажите где ошибка?

Ответить

tikkiwiki tikkiwiki 12.02.2014 12:11:43

Александр, здравствуйте, проблема скорее всего в том, что неверное размещаете, т.к код написан правильно.

Ответить

lexrast lexrast 12.02.2014 13:34:53

Пути правильные. Я проблему решил: на самом деле код написан не совсем правильно. вот как нужно было написать и всё заработало: <?php include '/../helloworld.php'; ?>

Ответить

Juzeppe Juzeppe 18.09.2014 03:00:28

Вопрос по теме include. Прошу помощи. Ситуация такая. У меня есть страничка-шаблон которая собирается из других файлов(top.php footer.php) с помощью include("имя_файла.php"). все это лежит в корне сайта. а файлы top.php и footer.php содержат навигацию и другие ссылки внутри себя вида "images/имя_файла". проблемы начались когда я создал папку articles и разместил там множество статей на основе моего файла-шаблона. все ссылки перестали работать. т.к. они уже не из корня сайта исходят а из папки. как быть?как это делается по правильному.

Ответить

Juzeppe Juzeppe 18.09.2014 03:04:47

как сделать так чтобы основные составные части сайта лежали в корне, а другие странички, которые из них собираются, размещались в разных папках(articles,doctors,clinics). у кого есть опыт.подскажите.

Ответить

UniqF UniqF 22.11.2014 17:49:44

А безопасно ли подключать библиотеку со стороннего сайта, например для записи в бд? То есть библиотека с функциями лежит на сайте lol.ru, а вы ее подключаете на сайте sajt.ru, после используете ее методы для работы с бд.

Ответить

alexandrdante alexandrdante 22.11.2014 18:33:04

ответ дан на форуме. Пожалуйста,не дублируйте сообщения.Всё равно быстрее ответ дан не будет

Ответить

UniqF UniqF 22.11.2014 19:06:51

Думал тут уже не читают:)

Ответить

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