Intereting Posts
php: число только хеш? Проблема с эскизом сообщения WordPress (только 1 миниатюра на главной странице) Facebook getAccessToken () возвращает токен доступа к приложениям: работает отлично на одном сервере, но бросает токен доступа к приложениям в другом. Выяснение точного ключа, созданного mcrypt PHP Каков наиболее безопасный способ для загрузки файла? Базовый PHP-объектно-ориентированный интродукция и инжекция зависимостей Где APC хранит данные? Загрузка множественного изображения PHP с проверкой размера и типа Как предотвратить инъекцию mysql при использовании предложения mysql IN без activeRecord в Yii? Как заставить MySQL возвращать UTF-8? Кастинг объекта массиву – вызов любого магического метода? Как перебирать строку UTF-8 в PHP? Изменение размера анимированного GIF-файла без уничтожения анимации Отладка скрипта cron PHP PHP и Codeigniter. Как вернуть объект массива, а не простой массив?

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

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

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

Solutions Collecting From Web of "Как включить файл из 2 каталогов?"

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

 ../../index.php 

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

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

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

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

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

 . = current directory .. = parent directory 

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

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

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

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

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

 define('BD', '/home/user/public_html/example/'); define('HTMLBD', 'http://example.com/'); 

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

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

определить (); Справка

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

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

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

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

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

И самый старый пост, который я нашел, ссылаясь на этот трюк, восходит к 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' trick, включение выполняется из скрипта parent.php , где код находится в.

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

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

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

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

 ../../index.php 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • корень
  • ….. | __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'; 

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

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

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

dirname referance

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

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

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

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

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

Все отлично.

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

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