Подтвердить что ты не робот

Почему я должен использовать dirname (__ FILE__) в инструкции include или include_once?

Я видел это:

<?php
  include( dirname(__FILE__) . DIRECTORY_SEPARATOR . 'my_file.php');
?>

Зачем мне это нужно? Зачем мне решать проблему с именем dirname, а затем конкатенировать это с помощью разделителя каталогов и нового имени файла?

Является ли приведенный выше код не эквивалентным этому:

<?php
  include( 'my_file.php' );
?>

??

В документе PHP говорится:

Файлы включаются на основе указанного пути к файлу или, если ни один не указан, указан путь include_path. Если файл не найден в include_path, include(), наконец, проверит в вызывающем script собственный каталог и текущий рабочий каталог перед сбоем. Конструкция include() выдаст предупреждение, если он не сможет найти файл; это другое поведение от require(), которое будет генерировать фатальную ошибку.

4b9b3361

Ответ 1

Скажем, у меня есть (поддельная) структура каталогов, например:

.../root/
        /app
            bootstrap.php
        /scripts
            something/
                somescript.php
        /public
            index.php

Теперь предположим, что bootstrap.php содержит некоторый код для настройки соединений с базой данных или какого-либо другого типа файлов с расширением.

Предположим, вы хотите включить файл в папку boostrap.php с именем init.php. Теперь, чтобы избежать сканирования всего пути include с помощью include 'init.php', вы можете использовать include './init.php'.

Есть проблема, хотя. Этот ./ будет относиться к script, который включал 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')?

Ответ 2

Если вы хотите, чтобы код работал на нескольких серверах с разными средами, тогда нам нужно  использовать dirname (FILE) в операторе include или include_once. причина следующая. 1. Не предоставляйте абсолютный путь для включения файлов на ваш сервер. 2. Динамически вычислить полный путь, как абсолютный путь.

Используйте комбинацию имени dirname (FILE) и последующих вызовов к себе, пока не дойдете до дома вашего '/myfile.php'. Затем присоедините эту переменную, которая содержит путь к вашим включенным файлам.

Ответ 3

Я использовал это ниже, если это то, о чем вы думаете. Это сработало для меня.

<?php
    include $_SERVER['DOCUMENT_ROOT']."/head_lib.php";
?>

То, что я пытался сделать, это файл pulla, названный /head _lib.php из корневой папки. Это не потянет ничего, чтобы создать веб-страницу. Заголовок, нижний колонтитул и другие ключевые функции в подкаталогах никогда не появятся. Пока я не сделал это, он работал как чемпион.