Как мне включить файл более 2 каталогов обратно?

php include filesystems

213971 просмотра

19 ответа

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

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

Источник Размещён: 17.05.2019 02:35

Ответы (19)


132 плюса

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

../../index.php

Это было бы двумя каталогами вверх.

Автор: Konrad Rudolph Размещён: 02.10.2008 03:10

49 плюса

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

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

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

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

Автор: Dan Hulton Размещён: 02.10.2008 03:14

26 плюса

. = current directory
.. = parent directory

Таким образом, ../вы получите один каталог назад, а не два .

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

Автор: Joe Skora Размещён: 02.10.2008 03:12

16 плюса

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

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

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

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

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

И самый старый пост, который я нашел со ссылкой на этот трюк, датируется 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

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

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

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

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

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

Автор: gaborous Размещён: 23.08.2012 03:29

15 плюса

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

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

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

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

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

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

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

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

Автор: Brian Dillingham Размещён: 14.08.2012 01:57

13 плюса

../../index.php 

       

Автор: bdukes Размещён: 02.10.2008 03:09

10 плюса

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

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

Автор: leek Размещён: 02.10.2008 03:10

7 плюса

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

./ = Your current directory
../ = One directory lower
../../ = Two directories lower
../../../ = Three directories lower
Автор: user2951753 Размещён: 13.11.2013 05:51

6 плюса

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

../../../- это идет три. так далее

Автор: Ólafur Waage Размещён: 02.10.2008 03:10

6 плюса

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

         

Автор: MazarD Размещён: 02.10.2008 03:10

5 плюса

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

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

или другие конфиденциальные системные файлы.

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

Автор: ZombieSheep Размещён: 02.10.2008 03:13

5 плюса

../../../includes/boot.inc.php
Автор: HAXEN Размещён: 02.10.2008 03:10

3 плюса

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

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

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

Dirname Reference

Автор: ron Размещён: 06.12.2016 06:34

2 плюса

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

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

Автор: khan Размещён: 15.09.2012 01:04

2 плюса

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

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

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

Автор: Mauro Размещён: 02.10.2008 03:15

2 плюса

в том числе над каталогами могут быть обработаны через прокси-файл

  • корень
  • ..... | __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';
    
Автор: allenn Размещён: 10.04.2014 09:07

2 плюса

Я рекомендую использовать __DIR__для указания текущего каталога файлов php . Проверьте здесь по причине.

__DIR__ . /../../index.php
Автор: Kris Roofe Размещён: 11.05.2017 02:02

1 плюс

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

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

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

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

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

Все отлично.

Автор: Bronek Размещён: 05.09.2012 08:57

0 плюса

Попробуй это

этот пример один каталог назад

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

этот пример два каталога назад

require_once('../images/yourimg.png');
Автор: rajpoot rehan Размещён: 03.04.2019 06:51
Вопросы из категории :
32x32