PHP: немного об include и require



Эти директивы заменяются интерпретатором в процессе выполнения скрипта на содержимое файла, указанного в качестве параметра. Аналогией является директива #include в языке C. Синтаксис очень простой:

include "/folder/file.inc";
require "/folder/file.inc";

Кроме открытия локальных файлов, можно подключать файлы по сети используя вместо пути URL. Эта возможность может быть блокирована параметром конфигурации URL fopen wrappers.

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

Подключаемый файл выполняется как HTML-код. Таким образом, если вы хотите подключить php-скрипт, код должен быть обрамлен <?php и ?>.

Директивы require и include не являются функциями. Скорее они — специальные конструкции языка. Иногда include называют "почти-функцией", так как она может принимать значение, возвращаемое командой return во включаемом коде (при этом выполнение включаемого сценария прекращается).

Пример верного и неверного сравнения возвращаемого значения конструкцией include:

// Неправильно:
if (include ('file.php') == 'ok') {
   echo 'ok';
}

// Правильно:
if ((include 'file.php') == 'ok') {
   echo 'ok';
}

Дополнительно: include_once, require_once, get_included_files

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

Иногда бывает нужно узнать какие файлы были подключены вышеописанными директивами. Для этого в php есть две идентичные функции: get_included_files и get_required_files. Каждая из них возвращает массив с именами включенных файлов. Вот вам пример использования:

include 'file1.php';
require_once 'file2.php';
var_dump(get_included_files());

Результатом будет вывод такого вида:

array(3) {
  [0]=>
  string(21) "index.php"
  [1]=>
  string(21) "file1.php"
  [2]=>
  string(21) "file2.php"
}

Первый элемент возвращаемого массива - имя исходного скрипта.

Комментарии

1. include может возвращать значение.
2. include файла которого нет, генерит warning или notice уже не помню
3. require файла которого нет генерит fatal error
4. В том то и дело что они работают не ака #include в си, по моему это только require себя так ведет

А если включение файлов по http отключена, то можно ли включать таким образом файлы по http, но с того же домена? Например если файл для включения находится в корне сайта, а файл из которого включается где-нибудь в папке на три уровня "в глубину". При указывании относительного пути можно ведь указывать только одну родительскую паку ../ , а как указать файл, если он лежит где-то выше?

По моему в таких случаях можно использовать что-нить вроде ../../../

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешаю теги: <a> <em> <strong> <pre> <ul> <ol> <li>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.

Подробнее о форматировании

Image CAPTCHA
Регистр символов учитывается.