Я видел это:
<?php include( dirname(__FILE__) . DIRECTORY_SEPARATOR . 'my_file.php'); ?>
Зачем мне это нужно? Зачем мне решать проблему с именем dirname, а затем конкатенировать это с помощью разделителя каталогов и нового имени файла?
Является ли приведенный выше код не эквивалентным этому:
<?php include( 'my_file.php' ); ?>
??
В PHP-документе говорится:
Файлы включаются в зависимости от заданного пути к файлу или, если ни один не указан, указан путь include_path. Если файл не найден в include_path, include () будет, наконец, проверять собственный каталог вызывающего сценария и текущий рабочий каталог перед сбоем. Конструкция include () выдаст предупреждение, если он не сможет найти файл; это другое поведение от require (), которое будет генерировать фатальную ошибку.
Допустим, у меня есть (поддельная) структура каталогов, например:
.../root/ /app bootstrap.php /scripts something/ somescript.php /public index.php
Теперь предположим, что bootstrap.php
имеет некоторый код, включенный для настройки соединений с базой данных или какого-то другого типа файлов для форматирования.
Предположим, вы хотите включить файл в папку init.php
называемую init.php
. Теперь, чтобы избежать сканирования всего пути include с include 'init.php'
, вы можете использовать include './init.php'
.
Однако есть проблема. Это ./
будет относиться к скрипту, который включал bootstrap.php
, а не bootstrap.php
. (С технической точки зрения, это будет относиться к рабочему каталогу.)
dirname(__FILE__)
позволяет вам получить абсолютный путь (и, следовательно, избежать поиска путей включения), не полагаясь на рабочий каталог, являющийся каталогом, в котором находится bootstrap.php
.
(Примечание: начиная с PHP 5.3 вы можете использовать __DIR__
вместо dirname(__FILE__)
.)
Теперь, почему бы просто не использовать include 'init.php';
?
Как ни странно, как сначала, хотя .
не может быть включен в путь включения. Иногда, чтобы избежать ненужных людей stat()
, удалите их из пути include, когда они редко содержат файлы в одном каталоге (почему поиск текущего каталога, когда вы знаете, не будет там?).
Примечание. Около половины этого ответа является адресом в довольно старом сообщении: что лучше требовать (dirname (__ FILE __). '/'. 'MyParent.php'), чем просто требовать ('myParent.php')?
Если вы хотите, чтобы код работал на нескольких серверах с разными средами, тогда нам нужно использовать dirname ( FILE ) в операторе include или include_once. причина следующая. 1. Не предоставляйте абсолютный путь для включения файлов на ваш сервер. 2. Динамически вычислять полный путь, как абсолютный путь.
Используйте комбинацию dirname ( FILE ) и последующих вызовов к себе, пока не дойдете до дома вашего /myfile.php. Затем присоедините эту переменную, которая содержит путь к вашим включенным файлам.
Я использовал это ниже, если это то, о чем вы думаете. Это сработало для меня.
<?php include $_SERVER['DOCUMENT_ROOT']."/head_lib.php"; ?>
То, что я пытался сделать, это файл pulla, названный /head_lib.php из корневой папки. Это не потянет ничего, чтобы создать веб-страницу. Заголовок, нижний колонтитул и другие ключевые функции в подкаталогах никогда не появятся. Пока я не сделал это, он работал как чемпион.