<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

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

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

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

Подписавшись по 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

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

Ответить

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