Как мне включить файл более 2 каталогов обратно?
213971 просмотра
19 ответа
Как вы включаете файл, который более 2 каталогов назад. Я знаю, что вы можете использовать, ../index.php
чтобы включить файл, который находится в 2 каталогах назад, но как вы делаете это для 3 каталогов назад? Имеет ли это смысл? Я пытался, .../index.php
но это не работает.
У меня есть файл, /game/forum/files/index.php
и он использует PHP для включения файла. Который находится в /includes/boot.inc.php
; /
будучи корневым каталогом.
Ответы (19)
132 плюса
..
выбирает родительский каталог из текущего. Конечно, это может быть приковано:
../../index.php
Это было бы двумя каталогами вверх.
Автор: Konrad Rudolph Размещён: 02.10.2008 03:1049 плюса
Чтобы включить файл на один каталог назад, используйте '../file'
. Для двух каталогов назад используйте '../../file'
. И так далее.
Хотя на самом деле вы не должны выполнять включения по отношению к текущему каталогу. Что если вы захотите переместить этот файл? Все ссылки сломаются. Чтобы убедиться, что вы по-прежнему можете ссылаться на другие файлы, сохраняя эти ссылки при перемещении файла, выполните следующие действия.
require_once($_SERVER['DOCUMENT_ROOT'] . 'directory/directory/file');
DOCUMENT_ROOT
это переменная сервера, представляющая базовый каталог, в котором находится ваш код.
26 плюса
. = current directory
.. = parent directory
Таким образом, ../
вы получите один каталог назад, а не два .
Цепь ../
столько раз, сколько необходимо, чтобы пройти 2 или более уровней.
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 документа :
Автор: gaborous Размещён: 23.08.2012 03:29Если путь определен - абсолютный (начиная с буквы диска или \ в Windows, или / в системах Unix / Linux) или относительно текущего каталога (начиная с. Или ..) - include_path будет полностью игнорироваться.
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 плюса
10 плюса
../../../includes/boot.inc.php
Каждый экземпляр ../
означает вверх / назад один каталог.
7 плюса
Ниже приведены способы доступа к вашим различным каталогам:
./ = Your current directory
../ = One directory lower
../../ = Two directories lower
../../../ = Three directories lower
Автор: user2951753
Размещён: 13.11.2013 05:51
6 плюса
Вы можете сделать ../../directory/file.txt
- это идет два каталога назад.
../../../
- это идет три. так далее
6 плюса
5 плюса
Но будьте ОЧЕНЬ осторожны, позволяя пользователю выбрать файл. Вы действительно не хотите, чтобы они получили файл с именем, например,
../../../../../../../../../../etc/passwd
или другие конфиденциальные системные файлы.
(Извините, прошло много времени с тех пор, как я был системным администратором Linux, и я думаю, что это чувствительный файл, насколько я помню)
Автор: ZombieSheep Размещён: 02.10.2008 03:135 плюса
3 плюса
если вы используете php7, вы можете использовать функцию dirname с параметром уровня 2, например:
dirname("/usr/local/lib", 2);
второй параметр "2" показывает, на сколько уровень выше
Автор: ron Размещён: 06.12.2016 06:342 плюса
Попробуй ../../
. Вы можете изменить его соответствующим образом, так как он вернет вас назад на две директории. Сначала дойдите до корневого каталога, затем получите доступ к нужному каталогу.
Например, вы находитесь в root/inc/usr/ap
другом каталоге root/2nd/path
. Вы можете получить доступ к path
каталогу ap
следующим образом:
../../2nd/path
сначала перейдите в корневой каталог, а не в нужный каталог. Если не работает, пожалуйста, поделитесь.
2 плюса
если вы включаете /
в начале включения, включение будет приниматься как путь от корня сайта.
если ваш сайт http://www.example.com/game/forum/files/index.php, вы можете добавить включение в /include/boot.inc.php, которое будет разрешено на http://www.example.com /include/boot.inc.php .
Вы должны быть осторожны с ..
обходом, так как некоторые веб-серверы отключили его; это также вызывает проблемы, когда вы хотите переместить свой сайт на новый компьютер / хост, и структура немного отличается.
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';
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:570 плюса
Попробуй это
этот пример один каталог назад
require_once('../images/yourimg.png');
этот пример два каталога назад
require_once('../images/yourimg.png');
Автор: rajpoot rehan
Размещён: 03.04.2019 06:51
Вопросы из категории :
- php Как вы отлаживаете PHP-скрипты?
- php Заставьте XAMPP / Apache обслуживать файл вне htdocs
- php Как включить файлы PHP, которые требуют абсолютного пути?
- php Скрипт входа со скрытыми кнопками
- php How can I find unused functions in a PHP project
- php Эффективное изменение размера JPEG изображения в PHP
- include Динамически загружать файл JavaScript
- include В чем разница между #include <filename> и #include "filename"?
- include Как мне включить файл более 2 каталогов обратно?
- include Заголовки, включающие друг друга в C ++
- include Запретить прямой доступ к файлу php
- include What is the difference between #import and #include in Objective-C?
- filesystems Хранить файл в базе данных в отличие от файловой системы?
- filesystems Как проверить, является ли данная строка допустимым / допустимым именем файла в Windows?
- filesystems Налагает ли Java какие-либо дополнительные ограничения на имена файлов, кроме базовой операционной системы?
- filesystems Как вы рекурсивно просматриваете каждый файл / каталог в стандартном C ++?
- filesystems Как мне скопировать файл в Python?