Как включить файл из 2 каталогов?

Как включить файл, содержащий более двух каталогов. Я знаю, что вы можете использовать ../index.php для включения файла, который содержит 2 каталога, но как вы это делаете для 3-х каталогов? Имеет ли это смысл? Я пробовал .../index.php, но он не работает.

У меня есть файл в /game/forum/files/index.php, и он включает PHP include для включения файла. Который находится в /includes/boot.inc.php; / является корневым каталогом.

Ответ 1

.. выбирает родительский каталог из текущего. Конечно, это может быть цепочка:

../../index.php

Это будет два каталога вверх.

Ответ 2

Чтобы включить файл в один каталог обратно, используйте '../file'. Для двух каталогов назад используйте '../../file'. И так далее.

Хотя, реалистично вы не должны выполнять, относится к текущему каталогу. Что делать, если вы хотите переместить этот файл? Все ссылки сломаются. Способ гарантировать, что вы все равно можете ссылаться на другие файлы, сохраняя эти ссылки, если вы перемещаете файл, это:

require_once($_SERVER['DOCUMENT_ROOT'] . 'directory/directory/file');

DOCUMENT_ROOT - это переменная сервера, которая представляет базовый каталог, в котором находится ваш код.

Ответ 3

. = current directory
.. = parent directory

Итак, ../ возвращает вам один каталог, а не два.

Цепочка ../ столько раз, сколько необходимо, чтобы подняться на 2 или более уровней.

Ответ 4

include dirname(__FILE__).'/../../index.php';

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

В самом деле, это заставит include всегда быть относительно положения текущего script, где находится этот код (какое местоположение, скорее всего, стабильно, поскольку вы определяете архитектуру своего выражение). Это отличается от выполнения include '../../index.php' который будет относиться к исполнению (также называемому "вызов" ) script, а затем относительно текущего рабочего каталога, который будет указывать на родительский script, который включает ваш script, вместо того, чтобы разрешать из вашего включенного пути script.

Из документации PHP:

Файлы включаются на основе указанного пути к файлу или, если ни один не указан, указан параметр include_path. Если файл не найден в include_path, include, наконец, проверит в вызывающем script собственный каталог и текущий рабочий каталог перед сбоем.

И самый старый пост, который я нашел со ссылкой на этот трюк относится к 2003 году, по Tapken.

Вы можете протестировать следующую настройку:

Создайте такой макет:

htdocs
¦   parent.php
¦   goal.php
¦
+---sub
    ¦   included.php
    ¦   goal.php

В parent.php, поставьте:

<?php
include dirname(__FILE__).'/sub/included.php';
?>

В sub/included.php, поставьте:

<?php
print("WRONG : " . realpath('goal.php'));
print("GOOD : " . realpath(dirname(__FILE__).'/goal.php'));
?>

Результат при доступе к parent.php:

WRONG : X:\htdocs\goal.php
GOOD : X:\htdocs\sub\goal.php

Как мы видим, в первом случае путь разрешен из вызывающего script parent.php, а при использовании трюка dirname(__FILE__).'/path' включение выполняется из script included.php, где код помещается.

Остерегайтесь следующего НЕ эквивалентного трюка выше, чем то, что можно прочитать в другом месте:

include '/../../index.php';

В самом деле, добавление / будет работать, но оно будет разрешаться точно так же, как include ../../index.php из вызывающего script (разница в том, что include_path не будет выглядеть после этого, если он терпит неудачу). Из документа PHP:

Если задан путь - абсолютный (начиная с буквы диска или\в Windows, или/в системах Unix/Linux) или относительно текущий каталог (начиная с. или..) - include_path будет вообще игнорируется.

Ответ 5

../ это один каталог, повторите для двух каталогов ../../ или даже для трех: ../../../ и так далее.

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

Вы можете определить некоторые константы так:

define('BD', '/home/user/public_html/example/');

define('HTMLBD', 'http://example.com/');

При использовании "BD" или моего "базового каталога" это выглядит так:

file(BD.'location/of/file.php');

определить(); ссылка

Ответ 6

../../index.php 

       

Ответ 7

../../../includes/boot.inc.php

Каждый экземпляр ../ означает "вверх/назад" один каталог.

Ответ 8

Ниже приведены способы доступа к вашим различным каталогам: -

./ = Your current directory
../ = One directory lower
../../ = Two directories lower
../../../ = Three directories lower

Ответ 9

Вы можете сделать ../../directory/file.txt - это два каталога назад.

../../../ - это три. и т.д.

Ответ 10

../../../index.php

         

Ответ 11

../../../includes/boot.inc.php

Ответ 12

Но будьте ОЧЕНЬ осторожны, чтобы позволить пользователю выбрать файл. Вы действительно не хотите разрешать им получать файл, например,

../../../../../../../../../../etc/passwd

или других важных системных файлов.

(Извините, прошло некоторое время с тех пор, как я был системным администратором linux, и я думаю, что это секретный файл, из того, что я помню)

Ответ 13

если вы используете php7, вы можете использовать функцию dirname с параметром уровня 2, например:

dirname("/usr/local/lib", 2);

второй параметр "2" указывает, сколько уровней вверх

ссылка dirname

Ответ 14

если вы включите / в начале включения, включение будет приниматься как путь от корня сайта.

если ваш сайт http://www.example.com/game/forum/files/index.php, вы можете добавить include/includes/boot.inc.php, который разрешил бы http://www.example.com/includes/boot.inc.php.

Вы должны быть осторожны с обходом .., поскольку некоторые веб-серверы отключены; это также вызывает проблемы, когда вы хотите переместить свой сайт на новый компьютер/хост, а структура немного отличается.

Ответ 15

Попробуйте ../../. Вы можете изменить его, так как он вернет вам два каталога. Сначала дойдете до корневого каталога, затем обратитесь в нужный каталог.

например. Вы находитесь в root/inc/usr/ap и есть другой каталог root/2nd/path. Вы можете получить доступ к каталогу path с ap следующим образом: ../../2nd/path сначала перейдите в корневой каталог, чем требуемый. Если вы не работаете, пожалуйста, поделитесь.

Ответ 16

включая более каталоги, могут обрабатываться прокси файлом

  • корень
  • ..... | __web
  • ..... |......... | _requiredDbSettings.php
  • ..... |
  • ..... | ___ дб
  • ..... |......... | _dbsettings.php
  • ..... |
  • ..... | _proxy.php

    dbsettings.php:
    $host='localhost';
    $user='username':
    $pass='pass';
    
    proxy.php:
    include_once 'db/dbsettings.php
    
    requiredDbSettings.php:
    include_once './../proxy.php';
    

Ответ 18

Я видел ваши ответы, и я использовал include path с синтаксисом

require_once '../file.php'; // server internal error 500

и HTTP-сервер (Apache 2.4.3) возвратили внутреннюю ошибку 500.

Когда я изменил путь к

require_once '/../file.php'; // OK

все в порядке.

Ответ 19

Попробуй это

require_once('../images/yourimg.png');

require_once ( '../изображений /yourimg.png');

require_once('../../images/yourimg.png');

require_once ( '../изображений /yourimg.png');